acks有三种可以设置:

0,生产者只管发送数据给kafka,不需要ack确认,容易数据丢失。

1,生产者发送数据给kafka,但只要leader写完数据,follower不管有没有同步完,都返回ack。如果在follower正在同步这部分数据期间,leader宕机了,那么这部分数据就会丢失。

-1,生产者发送数据给kafka,leader和isr中的所有follower都同步完数据了(注意,leader也是在isr中的),然后才返回ack。即只要isr中的所有节点都同步完数据了,那么就会返回ack。

 

虽然-1时基本上不会丢失数据,但是在某种极端情况下还是会的,即所有isr的副本都宕机,而另一些因为一些问题没有宕机也不在isr中的follower恢复了,就重新加入isr了,并重新选出leader,(退化到acks=1的情况了)。。。此时原本isr中的一些最新数据没有被同步到新的isr的副本节点中,那么那些数据就丢失了。

这种情况就是运维监控没做好,当有follower宕机了,就应该及时修复。。同时所有follower都宕机了,这个属于失责。

所以,要保证在最后一个副本(leader)宕机之前,修复其他follower节点,使得

isr的副本(包含leader)大于等于2才不会造成数据丢失。

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐