这个acks参数在kafka的使用中,是非常核心以及关键的一个参数,决定了很多东西。

Kafka producer有三种ack机制  初始化producer时在config中进行配置;

ack等于0:意味着producer不等待broker同步完成的确认,继续发送下一条(批)信息

提供了最低的延迟。但是最弱的持久性,当服务器发生故障时,就很可能发生数据丢失。例如leader已经死亡,producer不知情,还会继续发送消息broker接收不到数据就会数据丢失。

ack等于1(默认):意味着producer要等待leader成功收到数据并得到确认,才发送下一条message。此选项提供了较好的持久性较低的延迟性。

Partition的Leader死亡,follwer尚未复制,数据就会丢失

ack等于-1:意味着producer得到follwer确认,才发送下一条数据

持久性最好,延时性最差

 

0,1,-1三种机制性能递减,可靠性递增

 

如何保证宕机的时候数据不丢失?采用了多副本冗余的高可用机制。

在kafka集群中,每个Partition都有多个副本,其中一个副本叫做leader,其他的副本叫做follower。

假设一个Topic拆分为了3个Partition,分别是Partition0,Partiton1,Partition2,此时每个Partition都有2个副本。

比如Partition0有一个副本是Leader,另外一个副本是Follower,Leader和Follower两个副本是分布在不同机器上的。

这样的多副本冗余机制,可以保证任何一台机器挂掉,都不会导致数据彻底丢失,因为起码还是有副本在别的机器上的。
 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐