仅当在每个分区的副本上的写操作成功时,对Kafka主题的写操作才会成功吗?

问题描述 投票:0回答:2

仅当在每个分区的副本上的写入成功时,对Kafka主题的写入才成功吗?还是有可以配置的法定人数?

假设您有

  1. 制作人
  2. 具有主题1分区1(领导者)的服务器1
  3. 具有主题1分区1(副本)的服务器2
  4. 具有主题1分区1(副本)的Server3

制作人写给Topic1。仅当从Leader和两个副本服务器收到确认消息时,才存储消息的规则吗?还是可以配置仲裁:仅领导者?

apache-kafka kafka-producer-api kafka-partition
2个回答
2
投票

如果我正确理解了您的问题,您正在寻找名为acks的Producer API的配置。

acks:生产者要求领导者在确认请求完成之前已收到的确认数。这控制了发送记录的持久性。允许以下设置:

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

acks = 1这将意味着领导者会将记录写入其本地日志,但是将在不等待所有关注者的完全确认的情况下做出响应。在这种情况下,如果领导者在确认记录后立即失败,但在追随者复制记录之前失败,则记录将丢失。

acks = all这意味着领导者将等待完整的同步副本集来确认记录。这保证了只要至少一个同步副本仍处于活动状态,记录就不会丢失。这是最有力的保证。这等效于acks = -1设置。

类型:字符串默认值:1有效值:[全部,-1、0、1]重要性:高

检查Producer API的documentation了解更多详细信息。


1
投票

除了ack,还有一个问题,即消费者何时可以看到一条消息,该消息独立于生产者的ack,并且取决于代理配置,当所有关注者都同步接收到该消息时,就会发生这种情况。如果有任何落后,那就是min.insync.replicas收到消息的时候。我已经在https://chrisg23.blogspot.com/2020/02/kafka-acks-configuration-apology.html?m=1

上写过一些
© www.soinside.com 2019 - 2024. All rights reserved.