Kafka 被称为下一代分布式消息系统。
![图片[1]-kafka-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/12/image-287.png)
Kafka用于构建实时数据管道和流应用程序。
1、kafka 优势
- kafka 通过 O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以 TB 的消息存储也能够保持长时间的稳定性能。
- 高吞吐量:即使是非常普通的硬件 Kafka 也可以支持每秒数百万的消息。
- 支持通过 Kafka 服务器分区消息。
- 支持 Hadoop 并行数据加载
kafka 最主要的优势是其具备分布式功能、并可以结合 zookeeper 可以实现动态扩容,Kafka 是一种高吞吐量的分布式发布订阅消息系统。
![图片[2]-kafka-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/12/image-288.png)
O(1)就是最低的时空复杂度了,也就是耗时/耗空间与输入数据大小无关,无论输入数据增大多少倍,耗时/耗空间都不变,哈希算法就是典型的 O(1)时间复杂度,无论数据规模多大,都可以在一次计算后找到目标。
2、kafka 角色
Broker:Kafka 集群包含一个或多个服务器,这种服务器被称为 broker。
Topic :每条发布到 Kafka 集群的消息都有一个类别,这个类别被称为 topic,(物理上不同 topic 的消息分开存储在不同的文件夹,逻辑上一个 topic 的消息虽然保存于一个或多个 broker 上但用户只需指定消息的 topic 即可生产或消费数据而不必关心数据存于何处),topic 在逻辑上对 record(记录、日志)进行分组保存,消费者需要订阅相应的 topic 才能消费 topic 中的消息。
Partition :是物理上的概念,每个 topic 包含一个或多个 partition,创建 topic 时可指定 parition 数量,每个 partition 对应于一个文件夹,该文件夹下存储该partition 的数据和索引文件,为了实现实现数据的高可用,比如将分区 0 的数据分散到不同的 kafka 节点,每一个分区都有一个 broker 作为 leader 和一个 broker作为 Follower。
分区的优势(分区因子为 3):
- 实现存储空间的横向扩容,即将多个 kafka 服务器的空间结合利用
- 提升性能,多服务器读写
- 实现高可用,分区 leader 分布在不同的 kafka 服务器,比如分区 0 的 leader为服务器 A,则服务器 B 和服务器 C 为 A 的 follower,而分区 1 的 leader 为服务器 B,则服务器 A 和 C 为服务器 B 的 follower,而分区 2 的 leader 为 C,则服务器 A
Producer:负责发布消息到 Kafka broker。
Consumer:消费消息,每个 consumer 属于一个特定的 consuer group(可为每个consumer 指定 group name,若不指定 group name 则属于默认的 group),使用consumer high level API 时,同一 topic 的一条消息只能被同一个 consumer group内的一个 consumer 消费,但多个 consumer group 可同时消费这一消息。
![图片[3]-kafka-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/12/image-289.png)