kafka消息可靠性

Kafka有三种可能的delivery guarantee,分别是:

  1. At most once 消息可能会丢,但绝不会重复传输
  2. At least one 消息绝不会丢,但可能会重复传输
  3. Exactly once 每条消息肯定会被传输一次且仅传输一次。 producer在向broker发送一条消息时,有可能因为网络出错而导致producer不知道broker是否接收到了这条消息。网络错误可能发生在消息传递中,也有可能是broke收到消息之后将acks返回producer过程中。所以这时候producer会进行重发消息,但有可能会导致重复,保证了At least one。但在Kafka0.11.0的版本通过给每个producer一个唯一ID,并且在每条消息中生成一个sequence num,这样就能对消息去重,达到producer端的exactly once。 这边还涉及到一个acks值的设置: 1.acks=0,表示producer不会等待broker的相应,所以,producer无法知道消息是否发生成功,这样有可能导致数据丢失,但同时,acks值为0会得到最大的系统吞吐量。 2.acks=1,表示producer会在leader partition收到消息时得到broker的一个确认,这样会有更好的可靠性,因为客户端会等待知道broker确认收到消息。 3.acks=all(-1),producer会在所有备份的partition收到消息时得到broker的确认,这个设置可以得到最高的可靠性保证,但是影响吞吐量。

猜你喜欢

转载自my.oschina.net/134596/blog/1634245