[Kafka权威指南] Chapter 1. 初识Kafka
What is Kafka?
基于“发布/订阅”模型的消息队列
Why Kafka?
- 多生产者
- 方便数据聚合
- 多消费者
- 多个消费者同时消费同一个消息流,消息可以被多次重复消费。
- 多个消费者可以组成一个Group,保证特定消息只消费一次。
- 消息持久化
- 消费者不需要战战兢兢地消费消息,就算忙不过来,Kafka也能缓一下
- 可扩展
- 高性能
Basic Concepts of Kafka
主题Topic & 分区Partition
主题 Topics就好像文件夹一样,用于对消息进行归类。
分区,也就是文件夹内的文件,则用于消息的实际存储。
生产者将消息被追加到分区末尾,消费者从分区头部读取消息。
分区的个数,可能不会只有一个。
因而,从Topic的角度来看,消息的消费顺序可能并不等同于生产顺序。
消息Message
Message = [可选的Key] + Message Payload
Key主要用于分区的选择,PartitionIndex = hash(key) % Npartitions
当Key不存在时,Kafka自动在多个分区之间做负载均衡
Kafka不定义Message的结构,应用可以使用JSON等工具进行序列化
相较之下,小数据包对网络负载的影响更大。
因此,同属一个Partition的消息,可以打包压缩后一起传输,称为Batch
如上图示意的一样,当消息被放入分区Partition时会分配一个offset,用于消息的索引。
生产者 & 消费者
生产者将消息写入特定的Topic下;
消费者订阅一(多)个Topic,从而消费消息。
消费者在消费时,会记录当前已消费消息的offset。
每个消费者都隶属一个消费者Group
每条消息只能被消费者Group里的一个消费者消费(比如说一个程序里的多个线程协同处理,单次消费)
但是,不同消费Group可以同时消费同一条消息(比如说,A, B, C三个系统对同一份数据进行不同的处理,反复消费)
Brokers & 集群 & Leader
Broker就是Kafka服务节点,服务于生产者/消费者。
多个Broker可以构成一个集群。此时,其中一个Broker会被作为controller,负责集群的管理。
分区就好比一个文件,既可以存在A服务器上,也可以存在B服务器上,甚至都存。
但是,这总要有一个主/副之分。
分区主体所在的Broker,称为Leader。
在处理这个分区时,所有的消费者和生产者都必须连接至Leader
参考文献
1. 《Kafka权威指南》
2. https://www.cnblogs.com/xubiao/p/5361400.html