引言
kafka
是一款基于发布与订阅的消息系统。它一般被称为“分布式提交日志”或者“分布式流平台”。文件系统或者数据库提交日志用来提供所有事物的持久化记录,通过重建这些日志可以重建系统的状态。同样地,kafka
的数据是按照一定顺序持久化保存的,可以按需读取。
正文
1、kafka拓扑结构
美丽的拓扑
2、Kafka的特点
- 同时为分布和订阅提供高吞吐量。据了解,
Kafka
每秒可以生产约25万
条消息(50MB
),每秒处理55万
条消息(110MB
)这里说条数,可能不是特别准确,因为消息的大小可能不一致; - 可进行持久化操作,将消息持久化到到磁盘,以日志的形式存储,因此可用于批量消费,例如
ETL
,以及实时应用程序。通过将数据持久化到硬盘以及replication
防止数据丢失。 - 分布式系统,易于向外拓展。所有的
Producer
、Broker
和Consumer
都会有多个,均为分布式。无需停机即可拓展机器。 - 消息被处理的状态是在
consumer
端维护,而不是由server
端维护,当失败时能自动平衡。 - 支持
Online
和Offline
的场景。
3、Kafka的核心概念
名词 | 解释 |
---|---|
Producer | 消息的生成者 |
Consumer | 消息的消费者 |
ConsumerGroup | 消费者组,可以并行消费Topic 中的partition 的消息 |
Broker | 缓存代理,Kafka 集群中的一台或多台服务器统称broker . |
Topic |
Kafka 处理资源的消息源(feeds of messages)的不同分类 |
Partition |
Topic 物理上的分组,一个topic 可以分为多个partion ,每个partion 是一个有序的队列。partion 中每条消息都会被分配一个有序的Id (offset ) |
Message | 消息,是通信的基本单位,每个producer 可以向一个topic (主题)发布一些消息 |
Producers | 消息和数据生成者,向Kafka 的一个topic 发布消息的过程叫做producers
|
Consumers | 消息和数据的消费者,订阅topic 并处理其发布的消费过程叫做consumers
|
3.1、Producers的概念
- 消息和数据生成者,向
Kafka
的一个topic
发布消息的过程叫做producers
-
Producer
将消息发布到指定的Topic
中,同时Producer
也能决定将此消息归属于哪个partition
;比如基于round-robin
方式或者通过其他的一些算法等; - 异步发送批量发送可以很有效的提高发送效率。
kafka producer
的异步发送模式允许进行批量发送,先将消息缓存到内存中,然后一次请求批量发送出去。
3.2、Broker的概念:
-
Broker
没有副本机制,一旦broker
宕机,该broker
的消息将都不可用。 -
Broker
不保存订阅者的状态,由订阅者自己保存。 - 无状态导致消息的删除成为难题(可能删除的消息正在被订阅),
Kafka
采用基于时间的SLA
(服务保证),消息保存一定时间(通常7
天)后会删除。 - 消费订阅者可以
rewind back
到任意位置重新进行消费,当订阅者故障时,可以选择最小的offset
(id
)进行重新读取消费消息
3.3、Message组成
-
Message
消息:是通信的基本单位,每个producer
可以向一个topic
发布消息。 -
Kafka
中的Message
是以topic
为基本单位组织的,不同的topic
之间是相互独立的,每个topic
又可以分成不同的partition
,每个partition
储存一部分。 -
partion
中的每条Message
包含以下三个属性:
offset | long |
MessageSize | int32 |
data | messages的具体内容 |
3.4、Consumers的概念
- 消息和数据消费者,订阅
topic
并处理其发布的消息的过程叫做consumers
. - 在
kafka
中,我们可以认为一个group
是一个“订阅者”,一个topic
中的每个partion
只会被一个“订阅者”中的一个consumer
消费,不过一个consumer
可以消费多个partitions
中的消息
注:
Kafka
的设计原理决定,对于一个topic
,同一个group
不能多于partition
个数的consumer
同时消费,否则将意味着某些consumer
无法得到消息