Kafka 笔记

#Kafka

  1. 一个 topic 的多个 partition 分布在多个 broker 上,partition 物理上由多个 segment 组成。segment 由 index 和 log 组成。
  2. delivery guaranteeAt least onceAt most onceExactly once三种。

#一些思考

  1. index 用光了怎么办?
  2. 该怎么判断一个 message 可以被删除?(所有的消费状况都由 consumer 来记录的话?)
  3. ISR 是啥?
    1. In-Sync Replicas:能够和 leader 保持同步的follower+leader本身组成的集合。

#参考链接

#Kafka 权威指南

#硬件

  • 磁盘性能影响生产者,而内存影响消费者。如果消费者可以从内存读入数据,会比直接从磁盘读取效率高。
  • CPU 主要用于压缩和解压缩消息,相对而言不太需要特别关注。

#深入 Kafka

首选首领为什么对于负载均衡有益处?
acks 是属于生产者的配置,也就意味着同一个 topic,不同的生产者可以配置不同的 acks 策略。

#总结

  1. 一直以来对消息队列都有一种误解。消息队列没有任何手段能保证生产者生产的数据不会被重复投递,即 kafka 无法识别两个完全一样的消息,它会认为是两个消息。这种情况发生在网络抖动中(第一个请求未送达,发起重试,但两个消息都到达了)。
  2. 一直以来使用公司提供的 sdk 进行消息重试时,都可以尝试对单个消息进行失败重试,即“不 commit 就不算消费,下次依然可以消费成功”,但实际上,kafka 提交的是偏移量。在#30被提交时,意味着#1-#29其实都以为被消费成功了。单基于 kafka 来讲,仅靠 broker 的能力,不足以实现单点重试消费的能力。
  3. 读这本书时未得到的解答:在一批消息到达 broker 时,存储究竟是打包存储的还是拆包存储的。

#Apache Kafka 源码剖析

在 KafkaProducer 中维护了 Kafka 集群的元数据,这些元数据记录了:某个 Topic 中有哪几个分区,每个分区的 Leader 副本分配哪个节点上,Follower 副本分配哪些节点上,哪些副本在 ISR 集合中以及这些节点的网络地址、端口。