1、消费者参数优化
在生产环境中,往往需要根据实际的数据量和大小来决定更好的参数配置。
以下剖析几个常用的参数。
1.1 enable.auto.commit
指定了消费者是否自动提交偏移量,默认值是 true,为了尽量避免重复数据和数据丢失,可以把它设置为 false,有自己控制合适提交偏移量,如果设置为true,可以通过设置 auto.commit.interval.ms 属性来控制提交的频率。
1.2 auto.offset.reset
该参数指定了消费者在读取一个没有 Offset 或者 Offset 无效(消费者长时间失效,当前的 Offset 已经过时并且被删除了)的分区的情况下,应该作何处理,默认值是 latest,也就是从最新记录读取数据(消费者启动之后生成的记录),另一个值是 earliest,意思是在偏移量无效的情况下,消费者从起始位置开始读取
数据。
1.3 session.timeout.ms
该参数指定了当消费者被认为已经挂掉之前可以与服务器断开连接的时间。默认是 3s,消费者在 3s 之内没有再次向服务器发送心跳,那么将会被认为已经死亡。此时,协调器将会触发再均衡,把它的分区分配给其他的消费者,该参数与 heartbeat.interval.ms 紧密相关,该参数定义了消费者发送心跳的时间间隔,也就是心跳频率,一般要同时修改这两个参数,heartbeat.interval.ms 参数值必须要小 于 session.timeout.ms ,一般是 session.timeout.ms 的三分之一,比如,session.timeout.ms 设置成 3min,那么 heartbeat.interval.ms 一般设置成 1min,这样,可以更快的检测以及恢复崩溃的节点,不过长时间的轮询或垃圾收集可能导致非预期的再均衡(有一种情况就是网络延迟,本身消费者是没有挂掉的,但是网络延迟造成了心跳超时,这样本不该发生再均衡,但是因为网络原因造成了非预期的再均衡),把该参数的值设置得大一些,可以减少意外的再均衡,不过检测节点崩溃需要更长的时间。
1.4 max.partition.fetch.bytes
该参数指定了服务器从每个分区里返回给消费者的最大字节数。它的默认值是 1MB,也就是说,KafkaConsumer.poll()方法从每个分区里返回的记录最多不超 max.partitions.fetch.bytes 指定的字节。如果一个主题有 20 个分区和 5 个消费者,