在 Kafka 中,acks 参数用于配置生产者的消息确认模式。acks 参数可以设置为以下几个值之一:

  • acks=0:生产者在消息发送出去之前不会等待任何确认,消息被认为已经发送成功。这是最低延迟的设置,但是可能会导致消息丢失。
  • acks=1:生产者会等待 Leader 收到消息并发回确认。在这种设置下,消息至少被 Leader 收到,但是有可能在成功写入 Leader 之后、但在复制到 Followers 之前失败。
  • acks=allacks=-1:生产者会等待 Leader 收到消息,并且所有 Followers 同步完成后才会收到确认。这是最安全的设置,可以确保消息不会丢失,但会增加延迟。

acks设置为all-1时,Leader 在认为一条消息被 Commit(已成功写入并在所有 Followers 复制完成)时的情况是:

  1. Leader 成功写入消息: 消息首先被 Leader 成功写入到 Leader 所在的分区。
  2. Leader 向 Followers 复制消息: Leader 将消息复制到所有 ISR(In-Sync Replica)中的 Followers。ISR 是与 Leader 保持同步的副本集合。Leader 在等待 ISR 中的所有 Followers 同步完成。
  3. ISR 中的 Followers 同步完成: 当 ISR 中的所有 Followers 成功复制消息并确认完成后,Leader 认为消息已经被 Commit。

在这种情况下,只有当 ISR 中的所有 Followers 同步完成,Leader 才会认为消息被成功写入到所有的副本,从而进行 Commit。这样的设置可以确保消息不会因为某个 Followers 同步不及时而导致丢失,但会增加一定的延迟,因为需要等待所有的 Followers 完成同步。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.