除了在生产端,消费端,各自优化以外,还可以根据不同业务场景,多方面结合优化,进而取得最好的效果。
在考虑吞吐量优先的场景,放弃了时延性,无论是生产还是消费,原则是增大批量。
Producer:
• batch.size: 增加到 100000–200000 之间(default 16384)
• linger.ms: 增加到 10–100 之间 (default 0)
• compression.type=lz4 (default none, i.e., no compression)
• acks=1 (default 1)
• buffer.memory:如果有很多分区,则增加该值 (default 33554432)
Consumer:
• fetch.min.bytes: 增加到 100000 (default 1)
低时延要求的是尽快获取(发送)数据,因此少用批量才是第一优先级。
Producer:
• linger.ms=0 (default 0)
• compression.type=none (default none, i.e., no compression)
• acks=1 (default 1)
Consumer:
• fetch.min.bytes=1 (default 1)
Streams:
• StreamsConfig.TOPOLOGY_OPTIMIZATION: StreamsConfig.OPTIMIZE (default StreamsConfig.NO_OPTIMIZATION)
• Streams applications have embedded producers and consumers, so also check those configuration recommendations
Consumer:
• session.timeout.ms: 可适当增加该值(default 10000)
Streams:
• StreamsConfig.NUM_STANDBY_REPLICAS_CONFIG: 1 or more (default 0)
• Streams applications have embedded producers and consumers, so also check those configuration recommendations
消息的可靠性主要是关注消息的安全性,这样势必牺牲了一些性能,以数据安全性为第一优先级。
Producer:
• replication.factor=3
• acks=all (default 1)
• enable.idempotence=true (default false), 防止重复消息和乱序消息
• max.in.flight.requests.per.connection=1 (default 5), 当不使用幂等生产者时,防止乱序消息
Consumer:
• enable.auto.commit=false (default true)
• isolation.level=read_committed (when using EOS transactions)
Streams:
• StreamsConfig.REPLICATION_FACTOR_CONFIG: 3 (default 1)
• StreamsConfig.PROCESSING_GUARANTEE_CONFIG: StreamsConfig.EXACTLY_ONCE (default StreamsConfig.AT_LEAST_ONCE)
• Streams applications have embedded producers and consumers, so also check those configuration recommendations