Kafka4.0KRaft模式的“秒级启动”,是不是很爽?但真正的考验现在才开始!今天,咱们就来点硬核的:亲手搭建一个三节点的、准生产级的Kafka4.0KRaft集群!
准备好了吗?系好安全带,发车!
准备工作:三台服务器
在生产环境中,高可用是基本要求。我们将搭建一个包含3个节点的集群,这样即使挂掉一台,服务依然坚挺。
服务器:3台Linux服务器(虚拟机或物理机都行)kafka-1(IP:192.168.1.11)kafka-2(IP:192.168.1.12)kafka-3(IP:192.168.1.13)
软件:OpenJDK11或更高版本
Kafka版本:当然是最新的4.0.0!
运维避坑指南#1:确保三台服务器之间网络互通,并且防火墙开放了Kafka需要的端口(默认是9092和9093)。网络问题是集群搭建中最常见的“拦路虎”!
第一步:下载并解压Kafka
在所有三台服务器上执行以下操作:
#下载Kafka4.0.0wgethttps://downloads.apache.org/kafka/4.0.0/kafka_2.13-4.0.0.tgz#解压tar-xzfkafka_2.13-4.0.0.tgzcdkafka_2.13-4.0.0
第二步:生成集群ID
KRaft模式需要一个唯一的集群ID。我们只需要在一台服务器上生成它,然后所有节点共用。
#生成一个唯一的集群IDKAFKA_CLUSTER_ID="$(bin/kafka-storage.shrandom-uuid)"echo"你的集群ID是:$KAFKA_CLUSTER_ID"
记下这个ID,比如rQ8aQ9z1Tj-mN9yZ_wXb0w,我们马上会用到。
第三步:配置server.properties(核心中的核心!)
这是最关键的一步!我们需要为每个节点创建独立的配置文件。进入config/kraft/目录,这里有官方的模板。我们以kafka-1为例进行修改:
#进入配置目录cdconfig/kraft/#复制一份模板进行修改cpserver.propertiesserver-1.properties
打开server-1.properties,修改以下核心配置:
#【关键】节点角色:我们让每个节点都既是broker也是controllerprocess.roles=broker,controller#【关键】节点ID,每个节点必须唯一!#kafka-1设置为1,kafka-2设置为2,以此类推node.id=1#【关键】Controller投票节点列表#把所有Controller节点的node.id和IP:端口都列出来controller.quorum.voters=1@192.168.1.11:9093,2@192.168.1.12:9093,3@192.168.1.13:9093#【关键】监听器配置#broker监听来自客户端的连接,controller监听内部Raft协议的连接listeners=PLAINTEXT://:9092,CONTROLLER://:9093#【关键】广播给客户端的地址#必须是客户端能访问到的地址!advertised.listeners=PLAINTEXT://192.168.1.11:9092#日志存储目录,建议使用独立的高性能磁盘log.dirs=/var/lib/kafka/data
运维避坑指南#2:advertised.listeners是新手的噩梦!如果你发现客户端连接不上,99%是这里配错了。它必须是你的生产者/消费者能访问到的IP或域名。如果是云服务器,这里通常要配置成公网IP。
为kafka-2和kafka-3创建server-2.properties和server-3.properties,内容大部分相同,只需修改两处:
node.id分别改为2和3。
advertised.listeners的IP分别改为192.168.1.12和192.168.1.13。
第四步:格式化存储目录
在所有三台服务器上,使用我们之前生成的集群ID来格式化存储目录。
在kafka-1上执行:
bin/kafka-storage.shformat-t-cconfig/kraft/server-1.properties
在kafka-2上执行:
bin/kafka-storage.shformat-t-cconfig/kraft/server-2.properties
在kafka-3上执行:
bin/kafka-storage.shformat-t-cconfig/kraft/server-3.properties
看到Formatting...的日志就表示成功了。
第五步:启动集群
万事俱备,只欠东风!在所有三台服务器上启动Kafka服务。
在kafka-1上:
bin/kafka-server-start.sh-daemonconfig/kraft/server-1.properties
在kafka-2上:
bin/kafka-server-start.sh-daemonconfig/kraft/server-2.properties
在kafka-3上:
bin/kafka-server-start.sh-daemonconfig/kraft/server-3.properties
-daemon参数让它在后台运行。
第六步:验证集群
怎么知道我们的集群是不是成功了?创建一个Topic试试!
在任意一台Kafka服务器上执行:
#创建一个名为"hello-kraft"的Topic,3个分区,3个副本bin/kafka-topics.sh--create\--topichello-kraft\--bootstrap-server192.168.1.11:9092\--partitions3\--replication-factor3#查看Topic详情bin/kafka-topics.sh--describe\--topichello-kraft\--bootstrap-server192.168.1.11:9092
如果你能看到Topic的分区信息,并且Leader和Replicas分布在不同的节点上,那么恭喜你!你的第一个生产级Kafka4.0KRaft集群已经成功上线!
靳东,1976年出生于山东省,毕业于中央戏剧学院,国家一级演员,曾获得“青年五四奖章”先进个人、“全国德艺双馨电视艺术工作者”等荣誉称号。他还是第十四届全国政协委员。