阅读清单:
https://kafka.apache.org/documentation
producer:消息生产者,向 (topic, partition) 发送消息,若不指定 partition,则使用 key 进行哈希作为 partition,若不指定 key,则使用轮询方式(默认算法,可在客户端指定)获取 partition
topic:主题,分布式逻辑消息队列,一个 topic 由若干 partition 组成,发送到 topic 的消息实质上会到某个 partition中
partition:分区,单体物理消息队列,每个 partition 位于一个 Kafka 节点,单个 partition中消息被分配 offset 保证消息有序,partition物理形式为一个文件夹
consumer group:消费者组,Kafka 中消息消费以消费者组形式进行,消费者组是一个分布式逻辑消费者,不同消费者组可以消费同一个 topic 中消息,topic 消息以扇出形式被所有消费者组消费(即每个消费者组之间消息消费独立),一个消费者组可以消费哪些 topic 由该消费者组中消费者所指定消费的 topic 并集所决定
consumer:消费者,消费者属于且仅属于一个消费者组,每个消费者可以消费若干 topic 消息,对于同一个 topic,消费者组中所有可以消费该 topic 的消费者共同负责该 topic 的 partition,消费者均等分配 partition,若消费者数量少于 partition 数量则会出现一个消费者消费多个 partition 的情况,若消费者数量多于 partition,则会出现消费者不消费 partition 的情况
一个消费者被分配多个不同 partition 时如何消费各个 partition 由消费者自身决定顺序
消息存储
- 每一个 partition 对应一个物理文件夹,文件夹名称由 topic 名称 + partition 序号构成,partition 序号从 0 开始
- 每个 partition 由若干 segment 组成,每个 segment 对应一个 index 文件和一个 log 文件,其中 index 文件为 segment 索引文件,log 文件为 segment 数据文件,每个 segment 大小固定,但由于消息大小不同,故每个 segment 中消息数量不一样