Kafka学习笔记
Kafka 笔记
#Kafka
- 一个 topic 的多个 partition 分布在多个 broker 上,partition 物理上由多个 segment 组成。segment 由 index 和 log 组成。
delivery guarantee
有At least once
、At most once
、Exactly once
三种。
#一些思考
- index 用光了怎么办?
- 该怎么判断一个 message 可以被删除?(所有的消费状况都由 consumer 来记录的话?)
- ISR 是啥?
In-Sync Replicas
:能够和 leader 保持同步的follower
+leader本身
组成的集合。
#参考链接
#Kafka 权威指南
#硬件
- 磁盘性能影响生产者,而内存影响消费者。如果消费者可以从内存读入数据,会比直接从磁盘读取效率高。
- CPU 主要用于压缩和解压缩消息,相对而言不太需要特别关注。
#深入 Kafka
首选首领为什么对于负载均衡有益处?
acks 是属于生产者的配置,也就意味着同一个 topic,不同的生产者可以配置不同的 acks 策略。
#总结
- 一直以来对消息队列都有一种误解。消息队列没有任何手段能保证生产者生产的数据不会被重复投递,即 kafka 无法识别两个完全一样的消息,它会认为是两个消息。这种情况发生在网络抖动中(第一个请求未送达,发起重试,但两个消息都到达了)。
- 一直以来使用公司提供的 sdk 进行消息重试时,都可以尝试对单个消息进行失败重试,即“不 commit 就不算消费,下次依然可以消费成功”,但实际上,kafka 提交的是偏移量。在
#30
被提交时,意味着#1-#29
其实都以为被消费成功了。单基于 kafka 来讲,仅靠 broker 的能力,不足以实现单点重试消费的能力。 - 读这本书时未得到的解答:在一批消息到达 broker 时,存储究竟是打包存储的还是拆包存储的。
#Apache Kafka 源码剖析
在 KafkaProducer 中维护了 Kafka 集群的元数据,这些元数据记录了:某个 Topic 中有哪几个分区,每个分区的 Leader 副本分配哪个节点上,Follower 副本分配哪些节点上,哪些副本在 ISR 集合中以及这些节点的网络地址、端口。