0. 思维导图
Kafka是一种高吞吐量的分布式发布订阅消息系统。在此基础上,也是流处理平台。
1. 术语
- broker:Kafka 集群包含一个或多个服务器,这种服务器被称为 broker
- controller: Zookeeper 选出来的broker,它维护leader/follower信息。
- Topic:每条发布到 Kafka 集群的消息都有一个类别,这个类别被称为 Topic。
- partition:物理上的概念,每个 Topic 包含一个或多个 Partition.
- replica:partition 的副本,保障 partition 的高可用
- leader: replica 中的一个角色, producer 和 consumer 只跟 leader 交互
- follower: replica 中的一个角色,从 leader 中复制数据
- offset:partition 上的指针,consumer从这里开始读取
- replica:partition 的副本,保障 partition 的高可用
- partition:物理上的概念,每个 Topic 包含一个或多个 Partition.
- producer:负责发布消息到 Kafka broker
- consumer:消息消费者,向 Kafka broker 读取消息的客户端
- consumer group:每个 Consumer 属于一个特定的 Consumer Group(可为每个 Consumer 指定 group name,若不指定 group name 则属于默认的 group)
2. 基本概念
2.1. 架构图
1550407763258-
上方的Producers会产生很多的消息和信息送给kafka。
-
kafka会把这些消息存储下来。
-
下方的Consumers会从kafka获取它所需要的数据,然后自行处理,比如Consumers可能会将消息存储到cassandra、HBase。
-
右侧是流处理App。首先“流”是什么?“流”简单来说,就是不间断的一系列变化的数据或者消息。kafka可以很好的支持流处理(支持很多“流API”),一些流处理框架下的App可以接入kafka,并且可以实时的获取变化的数据和消息,对消息进行处理后可以立刻存回kafka,等待其它Consumers调用。
-
最后是左侧的connectors,通过它,你可以将kafka与不同的数据库或App联通,实现海量数据导入kafka或者从kafka导出。
总结一下,简单说,kafka是一个企业级的消息分发处理系统,可以帮助企业很好的进行多个系统间的消息事务处理,同时支持实时的流处理。
2.2. Zookeeper & Broker
kafka-communication.png它们的关系主要包括下面三点:
- Broker 连接 Zookeeper - for controller election,controller 维护 leader/follower关系.
- Brokers 互相连接 - for replication etc.
- Consumer/Producer 必须能连接每个 Broker - for reading/writing data etc.
2.3. Topic & Partition
数据写入topic,而topic是一个逻辑概念,实际写入partition。每个主题至少有一个分区,主题只是一组命名的分区,而分区才是实际上的数据流。应用通常只向主题发送或订阅消息,每个分区内部消息是有序的,通过 offset 维护消息序号。
ktdg 01052.4. Partitions & Consumer
消费者需要知道应该处理哪个分区上的数据[from Zookeeper(topic) and Brokers(leader)],以便相同消费群组中的消费者互不干扰。对于每个消费群组包含的消费者数量需小于分区数量,否则有些消费者将没有分区可以处理。为了均衡消费者的处理能,通常将分区数量配置为消费者的整数倍。
ktdg 01062.5. Rebalance
为了提高对数据的消费能力,重新调整partitions 与 consumers的关系,这就是在平衡,具体如下图。
rebalance.png
3 应用场景
kafka_scenario.png3.1. 消息系统
作为内部系统中间件,消息解耦使用。
3.2. 存储系统
接受外部传入的大量数据,等待内部应用程序消费,利用了Kafka高I/O特性,用来削峰。
3.3. 流处理
利用stream API,或者 stream lib 直接处理流数据。这是一种轻量级的解决方案。(以前会使用spark,storm,flink)
4 Kafka安装环境
kafka_setup.png4.1. 物理机
官网建议 Kafka 安装在物理机上,并且配有多硬盘。具体配置:
dual quad-core Intel Xeon machines with 24GB of memory, 8x7200 rpm SATA drives.
4.2. kafka in kubernetes
为了解决Kafka运维问题,把它迁移到K8S平台,通过Helm部署,目前它还不是一个成熟方案.
5 参考文档
Kafka: The Definitive Guide by Gwen Shapira, Neha Narkhede, Todd Palino
Apache Kafka on Kubernetes – Could You? Should You?
Getting Started with Apache Kafka and Kubernetes
Kafka最佳实践 - 参数配置: https://cloud.tencent.com/developer/article/1172050
Why is Zookeeper necessary for Apache Kafka? https://www.cloudkarafka.com/blog/2018-07-04-cloudkarafka_what_is_zookeeper.html
网友评论