名词解释
-
在一套 Kafka 架构中有多个 Producer,多个 Broker,多个 Consumer,每个 Producer 可以对应多个 Topic,每个 Consumer 只能对应一个 Consumer Group。
整个 Kafka 架构对应一个 ZooKeeper 集群,通过 ZK 管理集群配置,选举 Leader,以及在 Consumer Group 发生变化时进行 Rebalance。 -
Broker:消息中间件处理节点,一个kafka节点就是一个Broker
-
Producer:消息生产者。向Broker发送消息的客户端
-
Consumer:消息消费者。从Broker接收消息的客户端
-
Consumer Group:消息消费者组。每个Consumer都属于一个特定的Consumer Group,一条消息可以发送给多个Consumer Group,但每个Consumer Group中只能有一个Consumer消费该消息
-
Topic:消息的主题。kafka根据Topic对消息进行分类
-
Partition:物理上的概念(对应一个日志文件),一个Topic可以分为多个Partition,每个Partition内部是时间有序的,其编号成为Offset(long型数字)。
生产
- Producer对消息的Key值做hash然后做分区数量取余后,放入余数分区。如果消息没有Key值则轮询放入每个Partition。也可以手动确定Partition号
消费
- 推送模型(Push):Broker记录消息状态,消息给消费者后,标记为已消费
- 拉取模型(Pull):消费者自己控制消费
- 消息存储在log文件后,Consumer就可以进行消费了。Consumer主动的去找leader(kafka集群)拉取消息。
网络模型
- Client是单线程,Server是多线程
知识点
- ZooKeeper管理Broker和Consumer
- Kafka 一个 Topic 下面的所有消息都是以 Partition 的方式分布式的存储在多个节点上。
- Partition结构:
每个Partition的文件夹下面会有多组Segment文件。Partition对应的LogSegment 文件由两部分组成,分别为“.index”文件和“.log”文件,分别表示为 Segment 索引文件和数据文件(二分法查找)。
- Message结构:
上面说到log文件就实际是存储Message的地方,producer往kafka写入的也是一条一条的Message。
消息主要包含:消息体(内容,被压缩过)、消息大小(4byte,描述消息的大小)、offset(8byte,有序的id号,确定在parition内唯一的位置)、压缩类型。
https://www.cnblogs.com/sujing/p/10960832.html
https://www.jianshu.com/p/4bf007885116