kafka怎么保证消息不丢失

Kafka 如何保证消息不丢失取决于其提供的两个关键功能:复制和确认(acknowledgement)。

1. 复制(Replication)

Kafka 通过分区(Partition)的方式将消息在不同的 Broker 间进行复制。每个分区有多个副本,其中一个副本是 Leader(领导者),其他的是 Follower(追随者)。

当消息被发送到一个分区时,Leader 将消息写入其本地日志文件并向所有 Follower 发送该消息。当 Follower 收到消息后,会向 Leader 发送确认消息,即 ACK 消息,告诉 Leader 消息已经成功复制。只有当 Leader 收到了所有 Follower 的 ACK 消息时,才认为消息已经被成功复制。

2. 确认机制(Acknowledgement)

Kafka 提供了一种确认机制,即消息的发送者可以等待所有的消费者都处理完该消息后才确认该消息已经成功发送。这种确认机制通常会在生产者 API 中配置,并以 producer property 的形式提供。

当消息被发送后,生产者等待被发送到服务器的所有分区的确认消息的时间,如果没有收到确认消息,生产者将尝试重新发送消息。如果将确认超时时间设置为 0,则不需要确认机制,此时可以减少延迟,但也会增加消息丢失的风险。

因此,Kafka 通过分区复制和消息确认机制,保证了消息存储在不同的副本中,即使某些机器故障或消息被误删除,也可以从其他副本中恢复。

posted @ 2023-04-21 19:29  flytoyou  阅读(1814)  评论(0)    收藏  举报