kafka实践问题总结
总结线上遇到的问题,能很好的学习其中的理论,从而提高自己应对线上问题的能力。
要点概述:主要是因为kafka Broker在处理高水位线(HW)会涉及到读写锁leaderIsrUpdateLock,
(1)写入消息和拉去消息都会申请leaderIsrUpdateLock的读锁(2)ISR扩张和收缩时会申请leaderIsrUpdateLock的写锁
所以当ISR频繁发生扩张与收缩时会严重影响kafka消息的读写。
解决方法:
(1)replica.lag.time.max.ms从默认10s改为30s,降低副本被移除ISR门槛
(2)num.replica.fetchers从1适当增加,提高follower节点从leader节点同步数据的线程数
要点概述:
我们先来看用户主题分区:有两种情况会导致kafka消费组再平衡(reblaance)
(1)超过心跳检测时间,session.timeout.ms——如果在配置时间内coordinator没有收到该consumer的心跳,则将该consumer从group中移除
(2)两次poll超过配置时长,max.poll.interval.ms——两次poll之间的最大间隔时间
如果触发上面两条会触发某个消费组的再平衡,但是这种用户主题分区再平衡不会导致消息的堆积和消息丢失,只是在rebalance的过程中无法消费消息,会降低kafka的tps。
问题出现的根本原因是系统主题__consumer_offsets进行leader选举,进行leader选举会导致之前的协调器coordinator被移除,会删除内存中的消费组的元信息(包括消费点位),如果内存中消费点位信息不存在就会给消费者返回-1,这是就会触发消费者根据earliest和latest两种策略重置消费点位。
(1)如果设置为earliest,则会出现消息瞬间堆积
(2)如果设置为latest,则会出现丢消息的情况
区分用户主题和系统主题__consumer_offsets的leader选举。