调优最佳实践汇总

除了在生产端,消费端,各自优化以外,还可以根据不同业务场景,多方面结合优化,进而取得最好的效果。

吞吐量优化

在考虑吞吐量优先的场景,放弃了时延性,无论是生产还是消费,原则是增大批量。

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