Kafka producer 的三种 acks 机制

Kafka producer 有三种 ack 机制,为解决消息的重复和丢失。可以在初始化 producer时在 config 中进行配置,默认值:acks=1
举例

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("acks", "all");

 

acks=0 

producer写入 leader 分区,然后不等待 broker 同步完成的确认,就继续发送下一条(批)消息

特点:最低的延迟。但最弱的持久性,如当服务器发生故障时,就很可能发生数据丢失。例如 leader 已死亡或者切换,producer未感知,且继续发送消息,此时broker接收不到数据就会导致数据丢失。

acks=1

producer写入 leader 分区,producer需等待 leader 成功收到数据并得到确认,才发送下一条(批)消息。

特点:有较好的持久性和较低的延迟性。但是 Partition 的 Leader 死亡,follwer尚未复制,数据就会丢失。

【Kafka 基础】-- acks 机制_数据

acks=all 或者 acks=-1

producer 写入 leader 分区,producer 需等待 leader 成功收到数据并得到确认,且 producer 得到 follwer确认,才发送下一条(批)消息

特点:持久性最好,延时性最差。

【Kafka 基础】-- acks 机制_kafka_02

参考

  1. ​https://stackoverflow.com/questions/44992566/kafka-producer-acknowledgement​
  2. ​https://dzone.com/articles/kafka-producer-delivery-semantics#​
  3. ​https://kafka.apache.org/documentation/#producerconfigs​