可靠的数据传递
Kafka 通过以下几个方面实现可靠的数据传递:
- 分区副本 - Kafka 的分区有多个副本,如果某个副本失效,其他副本可以继续服务。
- 生产者重试 - 生产者在发送消息失败时会自动重试,一直到成功发送或者达到最大重试次数。
- 批量确认 - 生产者会批量发送消息,并批量接收确认,避免过于频繁的网络交互。
- 消费者偏移量 - 消费者会追踪并定期提交消费偏移量,以指示已经消费到的位置,从而实现重试时不重复消费等功能。
- 最小批量 - Broker 会将小的消息批量组合,以减少网络传输次数,提高效率。
- 校验和 - Kafka 支持消息级别的 CRC32 校验和以检测消息内容错误。
- 顺序写磁盘 - Kafka 会将消息顺序写到磁盘,避免磁盘寻址重复读写,提高性能。
- 页缓存 - Kafka 利用页面缓存来减少磁盘 IO 次数,提高读写性能。
- 混合存储 - Kafka 支持内存与磁盘混合存储消息,热门消息在内存中,冷消息在磁盘上。
- 高可用 - Kafka 支持多副本、自动恢复机制与消息重试等功能提高可用性。
- 时间戳 - Kafka 在消息中加入时间戳,用于消息顺序与延迟计算。
- 生产者消息编号 - Kafka 生产者里的消息分配连续的编号,用于快速定位断点。
所以,Kafka 通过分区多副本、生产者消费者重试机制、批量操作与校验、顺序写磁盘与页缓存、混合存储、高可用设计以及时间戳与消息编号等手段,实现了高吞吐、低延迟与高可靠的数据传输。这也体现了 Kafka 的设计目标与关键机制