kafka Consumer参数设置
1.session.timeout.ms <= coordinator检测失败的时间
- 默认值是10s
- 该参数是 Consumer Group 主动检测 (组内成员comsummer)崩溃的时间间隔。若设置10min,那么Consumer Group的管理者(group coordinator)可能需要10分钟才能感受到。太漫长了是吧。
2.max.poll.interval.ms <= 轮询间隔(处理逻辑最大时间)
- 这个参数是0.10.1.0版本后新增的,可能很多地方看不到喔。这个参数需要根据实际业务处理时间进行设置,一旦Consumer处理不过来,就会被踢出Consumer Group 。
- 注意:如果业务平均处理逻辑为1分钟,那么max. poll. interval. ms需要设置稍微大于1分钟即可,但是session. timeout. ms可以设置小一点(如10s),用于快速检测Consumer崩溃。
3.auto.offset.reset
-
该属性指定了消费者在读取一个没有偏移量或者偏移量无效(消费者长时间失效当前的偏移量已经过时并且被删除了)的分区的情况下,应该作何处理,默认值是latest,也就是从最新记录读取数据(消费者启动之后生成的记录),另一个值是earliest,意思是在偏移量无效的情况下,消费者从起始位置开始读取数据。
-
注意:
auto_offset_reset
这个参数,只有在一个group
第一次运行的时候才有作用,从第二次运行开始,这个参数就失效了。
4.enable.auto.commit 自动提交位移
- 对于精确到一次的语义,最好手动提交位移
5.fetch.max.bytes
- 单次获取数据的最大消息数。
6.max.poll.records <= 吞吐量
- 单次poll调用返回的最大消息数,如果处理逻辑很轻量,可以适当提高该值。
- 一次从kafka中poll出来的数据条数,max.poll.records条数据需要在在session.timeout.ms这个时间内处理完
- 默认值为500
- heartbeat. interval. ms 心跳间隔
- heartbeat心跳主要用于沟通交流,及时返回请求响应。这个时间间隔真是越快越好。因为一旦出现reblance,那么就会将新的分配方案或者通知重新加入group的命令放进心跳响应中。
- connection. max. idle. ms <= socket连接
- kafka会定期的关闭空闲Socket连接。默认是9分钟。如果不在乎这些资源开销,推荐把这些参数值为-1,即不关闭这些空闲连接。
- request. timeout. ms
- 这个配置控制一次请求响应的最长等待时间。如果在超时时间内未得到响应,kafka要么重发这条消息,要么超过重试次数的情况下直接置为失败。
- 消息发送的最长等待时间.需大于session.timeout.ms这个时间
- fetch.min.bytes
- server发送到消费端的最小数据,若是不满足这个数值则会等待直到满足指定大小。默认为1表示立即接收。
- fetch.wait.max.ms
- 若是不满足fetch.min.bytes时,等待消费端请求的最长等待时间