概要
kafka是什么?
Apache Kafka 是一个基于 Zookeeper 的开源的分布式事件流平台,支持多分区、多副本,由数以千计的高性能数据管道、流分析、 数据集成和任务关键型应用程序。主要用于处理消费者规模网站中的所有动作流数据(基于发布订阅模式的消息引擎系统)。
流数据
流式数据(Streaming Data)是指在不间断的时间序列中产生的数据流,这些数据通常是实时生成的,且需要实时处理和分析。与批处理数据不同,流式数据的特点是数据量大、速度快、变化频繁,并且需要实时响应和处理
常见的流式数据类型
- 传感器数据:传感器数据是指由各种传感器产生的实时数据流,例如温度、湿度、压力、光照等数据。
- 日志数据:日志数据是指由各种应用程序、服务器、网络设备等产生的实时日志数据流,例如服务器日志、应用程序日志、网络流量日志等。
- 交易数据:交易数据是指由各种交易系统、证券市场等产生的实时交易数据流,例如股票交易数据、外汇交易数据等。
- 用户数据:用户数据是指由各种应用程序、网站、移动应用等产生的实时用户数据流,例如用户行为、用户访问记录、用户交互数据等。
- IOT数据:IoT数据是指由各种物联网设备产生的实时数据流,例如智能家居设备、智能汽车设备、智能医疗设备等(比如传感器数据、位置数据、健康数据等)。
1. Kafka的三个关键功能
- 发布(写入)和订阅(读取)事件流,包括连续导入/导出来自其他系统的数据。
- 根据需要持久可靠地存储事件流。
- 在事件发生时或回顾性地处理事件流。
所有这些功能都是以分布式、高度可扩展、弹性、容错和 安全的方式。Kafka 可以部署在裸机硬件、虚拟机和容器上,也可以部署在本地以及在云中。可以选择自我管理 Kafka 环境和使用完全托管环境由各种供应商提供的服务。
2. Kafka的主要概念
基础架构图
事件:
记录了业务中"发生了某些事情"的事实。也可以称为记录或消息。当 Kafka 读取或写入数据时,将以事件的形式执行。每条记录都包含键、值、时间戳,下面是一个示例事件:
键:“爱丽丝”
值:“向 Bob 支付了 200 美元”
时间戳:“25 年 2020 月 2 日下午 06:<>”
生产者/消费者:
生产者(Producer) 是向 Kafka 发布(写入)事件的客户端应用程序,用于持续不断的向某个主题发送消息;消费者(consumer) 是订阅(读取和处理)这些事件的客户端应用程序,用于处理生产者产生的消息。
生产者和消费者是完全解耦的,彼此不可知。生产者永远不需要等待消费者,消费者需要消费的时候可以直接拿,两者没有谁等谁的概念之分。消费者群组:
生产者与消费者的关系就如同餐厅中的厨师和顾客之间的关系一样,一个厨师对应多个顾客,也就是一个生产者对应多个消费者,消费者群组(Consumer Group) 指的就是由一个或多个消费者组成的群体。主题/分区:
主题(topic) 可以类似于文件系统中的文件夹,事件是该文件夹中的文件。一个主题可以有零个、一个或多个向其写入事件的生产者,也可以有零个、一个或多个订阅这些事件的消费者。类似共享文件夹,用户可以同时到某个文件或者文件夹里面写入和读出数据。事件被组织并持久存储在主题中。
分区(Partition) 是一个有序、不可变的记录序列,不断附加到结构化的提交日志中。分区中的每个事件都分配了一个称为偏移的顺序ID号,它唯一地标识分区中的每个记录(事件)。同一个主题中的分区可以不在一个机器上,有可能会部署在多个机器(不同节点)上,由此来实现 kafka 的伸缩性。
分区被称为Topic物理上的分组,一个Topic在Broker中被分为1个或者多个Partition, (一般为kafka节点数CPU的总核心数量)分区在创建Topic的时候可以指定。分区才是真正存储数据的单元。
Broker/集群:
一个 Kafka 服务器也称为 Broker,若干个 Broker 组成一个集群(Cluster),其中集群内某个 Broker 会成为集群控制器(Cluster Controller),它负责管理集群,包括分配分区到 Broker、监控 Broker 故障等。在集群内,一个分区由一个 Broker 负责,这个 Broker 也称为这个分区的 Leader。各个broker在集群中地位一样,我们可以随意的增加或删除任何一个broker节点。
Broker主要负责创建Topic,存储Producer所发布的消息,记录消息处理的过程,将消息保存到内存中,然后持久化到磁盘,为消息设置偏移量。
偏移量(Consumer Offset) 是一种元数据,它是一个不断递增的整数值,用来记录消费者发生重平衡时的位置,以便用来恢复数据)
3. Kafka的核心API
Producer API(生产者API)
:允许应用程序发布记录流至一个或多个kafka的topics(主题)。Consumer API(消费者API)
:允许应用程序订阅一个或多个topics(主题),并处理所产生的对他们记录的数据流。Streams API(流API)
:允许应用程序作为流处理器,从一个或多个主题中消费输入流并为其生成一个或多个输出流,有效的将输入流转换为输出流。Connector API(连接器API)
:允许构建和运行将 Kafka 主题连接到现有应用程序或数据系统的可用生产者和消费者。例如,关系数据库的连接器可能捕获对表的每个更改。Admin API(管理者API)
:用于管理和检查主题、代理和其他 Kafka 对象。
4. 参考文章
https://kafka.apache.org/documentation/
https://zhuanlan.zhihu.com/p/103249714
https://zhuanlan.zhihu.com/p/442962047
https://cloud.tencent.com/developer/article/1547380
https://zhuanlan.zhihu.com/p/74063251