Kafka 核心知识解析
一、Kafka 消息发送流程
Kafka 发送消息涉及两个线程:main 线程和 sender 线程。在 main 线程中,会创建一个双端队列 RecordAccumulator,main 线程负责将消息发送给 RecordAccumulator,而 sender 线程则从 RecordAccumulator 中拉取消息并发送到 Kafka Broker。
二、Kafka 分区的目的
- 合理使用存储资源与负载均衡
分区会分布在不同 broker 上,通过将海量数据分区存储在各个 broker,可以实现负载均衡的效果,以此达到合理使用存储资源的目的。 - 提高并行度
生产者能够以分区为单位发送消息,消费者也以分区为单位消费数据,这样大大提高了并行度。
三、Kafka 消息的有序性保障
- 生产者端
最简单的方式是设置一个分区,因为 Kafka 在同一个分区内传递消息是有序的。或者可以选择同步式发送模式,不过这种模式效率较低。 - 消费者端
可以设置单个消费者单个分区,以此确保消息的有序性。
四、ISR、OSR、AR 概念
ISR 是 Kafka 集群中还存活的副本,OSR 是在规定时间内没有做出响应被认为已经挂掉的副本,AR 包含 ISR 和 OSR。
五、Kafka 消息丢失情况及应对
- 生产者端消息丢失
如果 acks 设置不当很可能导致消息丢失,acks 有三种配置级别,最高级别是 -1 或者