kafka实践问题总结

  总结线上遇到的问题,能很好的学习其中的理论,从而提高自己应对线上问题的能力。

0、kafka生产者和消费者源码分析

1、Kafka ISR频繁伸缩缩引发性能急剧下降原因分析

要点概述:主要是因为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节点同步数据的线程数

2、kafka消费组再平衡导致的消息堆积或是丢消息问题

要点概述:

  我们先来看用户主题分区:有两种情况会导致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选举。

posted @ 2022-03-01 15:20  jingyi_up  阅读(180)  评论(0编辑  收藏  举报