kafka

1.kafka重复消费的理解?kafak broker上存储的消息都有一个offset的标记,kafka的消费者是通过offset标记来维护这个已经消费的一个数据的。消费者每消费一批数据kafka就更新offset的值,避免重复消费,默认情况下会自动提交offset的值,避免重复消费。kafka自动提交的逻辑里有个间隔五秒的机制,间隔五秒下一次向broker获取消息的时候,来来实现offset的一个提交。在consumer消费过程中,应用程序强制被kill掉或宕机的时候,可能导致offset没有提交从而会产生重复消费的问题。另外一种情况也会出现重复消费,kafka里有一种partition balance的一个机制,即把多个partition均匀的分配给多个消费者,consumer端会从分配的partition里消费消息,如果consumer无法在5分钟内处理完这一批消息,就会触发kafka的rebalance机制,从而导致offset自动提交失败,而在rebalance之后,consumer端还是会重之前的oferset位置消费消息,从而导致重复消费的问题。
2.怎么解决重复消费?大方向之一:提高消费端的处理性能 细分:使用异步的方式处理消息,缩短单个消息的消费时长;调整消息处理的超时时间;减少一次性从broker总拉取的数据条数。大方向之二:可以针对消息生成md5然后保存到mysql或redis中,在消息处理之前可以先去mysql或redis中判断是否已经被消费过。

posted @ 2025-05-23 20:14  哈孜  阅读(14)  评论(0)    收藏  举报