Linux 9 自动化部署 Kafka 集群

Apache Kafka 是一个开源的分布式事件流平台,被众多公司用于高性能数据管道、流分析、数据集成等 。本章将讨论 kafka 的自动化部署 。
 

什么是事件流: “事件流” 是按时间排序的一系列业务事件 。事件流处理平台实时从事件源 (比如数据库、移动设备、传感器、应用程序等) 捕获数据,持久化存储这些事件流以供检索、处理和响应事件流,并根据需要将事件流路由到不同的目标技术 。因此,事件流可确保数据的连续性、正确解释事件,从而使正确的信息在正确的时间出现在正确的位置 。
 
本章包含以下主题:
 
  • Kafka 介绍
  • 部署环境介绍
  • 自动化部署 Kafka
  • 验证
  • 总结
36.1 Kafka 介绍 
Kafka 是一个分布式系统,由服务端和客户端组成,通过 TCP 网络协议通信 。它可以部署在物理机、虚拟机或者容器上 。
Servers:Kafka 以一个或多个 Servers 集群的形式运行,可以跨多个数据中心或云区域 。提供存储层的 Servers 被成为 Brokers 。其他 Servers 运行 Kafka Connect,以事件流的形式持续导入和导出数据,将 Kafka 与现有的系统 (如关系型数据库) 以及其他 Kafka 集群集成 。Kafka 集群具有高度的可扩展性和容错性,如果任何一个 Server 故障,其他 Server 将接管工作,以确保连续运行,没有任何数据损失 。
Clients:通过 Client 可以编写分布式应用和微服务,以并行、大规模的方式读取、写入和处理事件流,即使在网络问题或机器故障的情况下也能容错 。
36.1.1 主要概念和术语
Event (事件) 记录了真实 “发生的事情”,在文档中也被称为记录或消息 。当向 Kafka 读写数据时,是以 event 的形式进行的 。从概念上讲,Event 包含键、值、时间戳和可选的元数据头 。如示例 36.1 。
示例 36.1,事件示例:
Event key: "Official accounts" Event value: "sretech" Event timestamp: "Dec. 24, 2022 at 2:06 p.m."
Producers (生产者) 是向 Kafka 发布 (写) events 的客户端应用程序 。Consumers 是订阅 (读和处理) events 的应用程序 。在 Kafka 中,Producers 和 consumers 完全解耦,互不相干,这是实现 Kafka 高度可扩展性的一个关键设计因素 。例如,Producers 从来不需要等待 consumers 。
Topics (主题) 用于分类存储 events 。可以将 topics 想象成文件夹,而 events 就是文件夹中的文件 。Kafka 中的 topics 可以多 producers 和多 consumers:一个 topic 可以有零个、一个或多个 producers 向其写入事件,也可以有零个、一个或多个 consumers 订阅这些事件 。一个主题中的事件可以根据需要反复读取——与传统的消息传递系统不同,事件在消费后不会被删除 。可以通过每个主题的配置设置来定义 Kafka 应该保留事件多长时间,之后旧的事件会被丢弃 。Kafka 的性能相对于数据大小来说是有效恒定的,所以存储数据很长时间是完全可以的 。
主题是分区 (partitioned) 的,一个主题被分散到位于不同 Kafka brokers 的若干 “桶” 中 。这种分布式的数据放置对可扩展性非常重要,因为它允许客户端应用程序同时从/向多个 brokers 读取和写入数据 。当一个新的事件被发布到一个主题时,它实际上是被附加到主题的一个分区中 。具有相同 key 的事件(例如,customer 或 vehicle ID)被写入相同的分区,Kafka 保证一个给定的主题分区的任何消费者将始终以完全相同的顺序读取该分区的事件 。
Linux 9 自动化部署 Kafka 集群

文章插图
 
图 36.1 图片来自 Kafka 官网
这个例子的主题有四个分区 P1-P4 。两个不同的生产者客户端通过网络向主题的分区写入事件,向主题发布新的事件,彼此独立 。具有相同密钥的事件(在图中用颜色表示)被写到同一个分区中 。注意,如果合适的话,两个生产者都可以写到同一个分区 。
为了使数据具有容错性和高可用性,每个主题都可以被复制,甚至跨地理区域或数据中心,这样总有多个 Broker 拥有数据的副本,以防出错 。一个常见的生产设置是复制系数为3,也就是说,数据总是有三个副本 。这种复制是在主题分区的层面上进行的 。
36.2 部署环境介绍
完成本教程至少需要四个节点:一个节点作为 Ansible 控制节点,三个节点部署 zookeeper 集群及 Kafka 集群 。
 
Kafka 可以基于 Zookeeper 部署,也可以基于 KRaft 协议部署 。KRaft 的方式部署起来相对简单,因此本教程仅演示基于 Zookeeper 的部署方式 。


推荐阅读