Apache Kafka是一个用 Java 编写的开源分布式事件和流处理平台,用于处理要求苛刻的实时数据馈送。它本质上是可扩展的,具有高吞吐量和高可用性。其设计也具有容错性,每个集群可支持数百个节点。
在本教程中,你将创建一个 Kafka 集群,使用 KRaft共识协议的 Kafka 集群。你将学习如何配置节点成为集群的一部分,并观察主题分区是如何分配给不同节点的。你还将学习如何将主题分配给集群中的特定代理。
让我们开始吧!
准备工作
为了你能顺利跟上本教程的步骤,你需要这些:
-
三个可用的 Droplets,至少需要 4GB 内存以及 2 个 CPU。如果是 Ubuntu 服务器,请按照 Ubuntu 初始服务器设置获取设置说明,或参照教程在 DigitalOcean Droplet 云主机上创建 Ubuntu 服务器。
-
一个完全注册的域名,带有指向三个 Droplets的三个子域。本教程将把它们分别称为 kafkaX.your_domain。你可以在 Namecheap 购买域名,在 Freenom 上免费获取一个,或者也可以使用你选择的域名注册商。
-
在 Droplets 上安装和配置 Apache Kafka。有关安装说明,你可以按照 Kafka 简介教程配置。你只需完成第一步 和第二步。
第一步:配置 Kafka 节点
在这一步中,你将配置作为准备工作
一部分创建的三个 Kafka 服务器,使其成为同一个 KRaft 集群的一部分。有了 KRaft,节点本身就可以组织和执行管理任务,而无需依赖 Apache ZooKeeper。
配置第一个节点
你将先配置第一个节点。首先,运行以下命令停止第一个 Droplet 上的服务:
sudo systemctl stop kafka
接下来,以用户 kafka 的身份,导航到 Kafka 所在的目录,并通过运行打开其配置文件进行编辑:
vi /config/kraft/server.properties
找出以下几行:
...
# The role of this server. Setting this puts us in KRaft mode
process.roles=broker,controller
# The node id associated with this instance's roles
node.id=1
# The connect string for the controller quorum
controller.quorum.voters=1@localhost:9092
...
这三个参数将 Kafka 节点同时配置为代理和控制器,这意味着它将接收和消费数据(代理)并执行管理任务(控制器)。这种分离在大型部署中非常有用,可以将控制器分开,以提高效率和冗余。
node.id
指定了节点在群集中的 ID。这是第一个节点,所以它的 ID 是 1
,因此第二个和第三个节点的 ID 将分别为 2
和 3
。
controller.quorum.voters
将节点 ID 映射到它们各自的地址和端口,以便通信。这里将指定所有集群节点的地址,以便每个节点都能知道其他节点。修改该行如下(config/kraft/server.properties):
...
controller.quorum.voters=1@kafka1.your_domain:9093,2@kafka2.your_domain:9093,3@kafka3.your_domain:9093
...
在此,你将列出集群中的所有三个节点及其各自的 ID。记住将 your_domain 替换为你在准备工作中设置的域名地址。
接下来,在文件中找到以下几行:
...
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
# Name of listener used for communication between brokers.
inter.broker.listener.name=PLAINTEXT
# Listener name, hostname and port the broker will advertise to clients.
# If not set, it uses the value for "listeners".
advertised.listeners=PLAINTEXT://localhost:9092
...
listeners
定义了 Kafka 节点监听的地址,而 advertised.listeners
则指定了将传递给客户端以连接到节点的地址。这让你可以为客户端指定它应该使用的实际地址的子集。
修改以下代码行,用实际域名替换其中的 your_domain
:
...
listeners=P