消息队列(五)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