1

只有在每个分区的副本上写入成功时,对 Kafka 主题的写入才会成功?或者是否有可以配置的法定人数?

假设你有

  1. 制片人
  2. Server1 和 Topic1 Partition1(Leader)
  3. Server2 和 Topic1 Partition1(副本)
  4. Server3 和 Topic1 Partition1(副本)

Producer 写入 Topic1。仅当收到来自领导者和两个副本的确认时才存储消息是否有规则?或者是否可以配置一个 quorum: only leader?

4

2 回答 2

2

如果我正确理解您的问题,您正在寻找名为acks.

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

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

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

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

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

查看Producer API 的文档以获取更多详细信息。

于 2020-03-06T19:37:05.213 回答
1

除了确认消息之外,还有一个问题是消息何时对消费者可见——这与对生产者的确认无关,并且取决于代理配置——如果所有关注者都同步收到消息,就会发生这种情况。如果有任何落后,那就是 min.insync.replicas 收到消息的时候。我在https://chrisg23.blogspot.com/2020/02/kafka-acks-configuration-apology.html?m=1

于 2020-03-06T22:22:35.577 回答