卡夫卡经纪人的'提交'数据是什么意思?

时间:2018-05-02 03:17:56

标签: apache-kafka kafka-producer-api

在包含N个代理的Kafka群集中,针对分区的Topic T,生产者将数据发布到Leader代理。通过Kafka术语中的“commit”一词,是指数据是在Leader代理中提交还是数据提交给Leader代理,也提交给ISR列表中可用的相应关注者。

2 个答案:

答案 0 :(得分:2)

这由名为ack的{​​{3}}控制:

  • acks=0如果设置为零,那么生产者将不会等待来自服务器的任何确认。该记录将立即添加到套接字缓冲区并视为已发送。在这种情况下,不能保证服务器已经接收到记录,并且重试配置将不会生效(因为客户端通常不知道任何故障)。为每条记录返回的偏移量将始终设置为-1。

  • acks=1 (默认)这意味着领导者会将记录写入其本地日志,但无需等待所有关注者的完全确认即可做出回应。在这种情况下,如果领导者在确认记录后立即失败,但在关注者复制之前,记录将会丢失。

  • acks=all这意味着领导者将等待完整的同步副本集以确认记录。这保证了只要至少一个同步副本仍然存活,记录就不会丢失。这是最强有力的保证。

答案 1 :(得分:0)

无论生产者中的“acks”设置如何,从代理的角度来看,当该分区的所有同步副本已将消息应用到其日志时,该消息就被视为“已提交”。

消费者只能读取已提交的消息。

“acks”属性只告诉生产者是否应该等待消息被提交(acks=all),写入到leader(acks=1),或者根本不等待(acks=0)

>