本文将围绕kafka的可用性展开,包含broker数据同步、顺序保证,以及生产者消费者为了保证数据同步可采用的高可用配置。是自己的一些心得。
文章关键词:
- 不完全的首领选举
- 丢数据的可能原因
- 发送消息中,kafka可重试错误和不可重试错误
- 保证顺序
- producer consumer的可靠性配置
不完全的首领选举
场景:首领挂了,但是follower没有同步
针对该场景可以采取两种方式:
- 等首领好(可用性差,保证不丢数据)
- 不等首领,选择未同步副本做首领(可用性高,但是丢了与老首领未同步完的中间数据)
可以通过unclean.leader.election.enable设置,为true对应方式二,false对应方式一
附:unclean可能会引发的问题:consumer “Fetch offset xxxx is out of range, resetting offset”
丢数据的可能原因
上面提到了unclean.leader.election.enable=true会导致数据丢失,下面两种情况也会导致数据丢失:
- producer生产者角色acks参数影响,可能会导致问题,场景:acks=1,发送给leader成功时,没有同步给replicas时leader挂了。在producer层面则丢失了这条消息
- acks=all时,发送时返回了“首领不可用”,但是producer客户端没有重试机制,或者好的处理方式ÿ