消息队列(五)kafka常见的配置

一:Producer相关的参数

1.acks,Produce的回应, 可选值 all, -1, 0 1. 默认值为1;

acks=0 不需要等待服务器的确认. 这时retries设置无效.

acks=1 表示leader写入成功(但是并没有刷新到磁盘)后即向producer响应。延迟中等,一旦leader副本挂了,就会丢失数据。

acks=all等待数据完成副本的复制, 等同于-1. 假如需要保证消息不丢失, 需要使用该设置. 

2.unclean.leader.election.enable为true, 保证当ISR列表为空时, 选择其他存活的副本作为新的leader.

3.min.insync.replicas:当acks=all时,至少有多少个Replicas需要确认已成功持久化数据,这个Replicas数量也包括Leader;

4.retries:重试的次数,大于0的时候,可能顺序有变化;

5.max.in.flight.requests.per.connection,默认是5,Producer允许未通过acks确认的请求最大数;

6.buffer.memory:producer可以使用的最大内存来缓存等待发送到server端的消息

7.batch.size、linger.ms:包大小,等待时间,当满足其中一个条件,就发送消息;

8.max.block.ms:Produce消息的最长时间;

9.enable.idempotence:幂等性,需要结合max.in.flight.requests.per.connection和retires、acks;

10.transaction.timeout.ms:事务协调器等待producer更新事务状态的最大毫秒数, 超过的话事务协调器会终止进行中的事务. 

二:Consumer相关的参数

0.group.id: Consumer的用户组,默认是"";

1. max.poll.records 表示每次默认拉取消息条数,默认值为 500;这个参数需要根据业务的数据量、处理时间、限流、可靠性等角度设置该参数;太小则拉取太频繁,太大则容易被认为故障;在Consumer的实现里面,为了减少并发、一致性等问题,Fetch拉取线程仅在当前拉取的message被处理完之后,才会进行下一次拉取

2. max.poll.interval.ms 表示消费者处理消息逻辑的最大时间,即max.poll.records的message最大的消费时间;若超过就会被 Coordinator 剔除消息组然后重平衡, 默认值为 300000;这个值应保持在实际应用的3-5倍,因为Consumer处理的时候,下游可能会超时、宕机等意外;

3.session.timeout.ms 默认10秒,在这个阈值内如果coordinator未收到consumer的任何消息,那coordinator就认为consumer挂了,那么就会Rebalance。

4.heartbeat.interval.ms:给coordinator发送心跳包的间隔时间,heartbeat.interval.ms越小,发的心跳包越多,一般在session.timeout.ms的三分之一左右。

5.enable.auto.commit、auto.commit.interval.ms:自动提交、若开启,提交的时间默认5s;

6.拉取相关:fetch.max.wait.ms、fetch.min.bytes、fetch.max.bytes

你可能感兴趣的:(消息队列(五)kafka常见的配置)