kafka 三台集群分布式发布订阅消息
构建一个三台 Kafka 集群的分布式发布/订阅系统,涉及到配置、启动和管理多个 Kafka Broker 和 ZooKeeper 实例。以下是一个详细的指南,帮助你在三台服务器(或虚拟机)上设置并运行一个高可用的 Kafka 集群。
环境准备
假设你有三台服务器,IP 地址分别为:
- Broker 1:
192.168.1.101 - Broker 2:
192.168.1.102 - Broker 3:
192.168.1.103
每台服务器上都安装了相同版本的 Kafka 和 ZooKeeper,并且已经配置好了 SSH 访问权限和防火墙规则,确保端口是开放的。
步骤 1:配置 ZooKeeper 集群
1. 创建 ZooKeeper 配置文件
在每台服务器上的 Kafka 安装目录中创建 ZooKeeper 的配置文件 zoo.cfg,例如 /etc/kafka/zoo.cfg:
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.1.101:2888:3888
server.2=192.168.1.102:2888:3888
server.3=192.168.1.103:2888:3888
2. 创建 myid 文件
在每台服务器的 dataDir 目录下创建一个名为 myid 的文件,内容为该实例的 ID(1、2 或 3)。例如,在 192.168.1.101 上:
echo "1" > /var/lib/zookeeper/myid
重复上述步骤,在 192.168.1.102 和 192.168.1.103 上分别创建 myid 文件,内容分别为 2 和 3。
3. 启动 ZooKeeper
在每台服务器上启动 ZooKeeper:
bin/zookeeper-server-start.sh config/zoo.cfg &
步骤 2:配置 Kafka 集群
1. 修改 Kafka 配置文件
在每台服务器上的 Kafka 安装目录中修改 server.properties 文件,确保每个 Broker 的配置文件不同。例如:
-
Broker 1 (
/etc/kafka/server1.properties):ini深色版本broker.id=1 listeners=PLAINTEXT://192.168.1.101:9092 advertised.listeners=PLAINTEXT://192.168.1.101:9092 log.dirs=/tmp/kafka-logs-1 zookeeper.connect=192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181 -
Broker 2 (
/etc/kafka/server2.properties):ini深色版本broker.id=2 listeners=PLAINTEXT://192.168.1.102:9092 advertised.listeners=PLAINTEXT://192.168.1.102:9092 log.dirs=/tmp/kafka-logs-2 zookeeper.connect=192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181 -
Broker 3 (
/etc/kafka/server3.properties):ini深色版本broker.id=3 listeners=PLAINTEXT://192.168.1.103:9092 advertised.listeners=PLAINTEXT://192.168.1.103:9092 log.dirs=/tmp/kafka-logs-3 zookeeper.connect=192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181
2. 启动 Kafka Brokers
确保所有 ZooKeeper 实例都已成功启动后,依次启动 Kafka Brokers:
bin/kafka-server-start.sh /etc/kafka/server1.properties &
bin/kafka-server-start.sh /etc/kafka/server2.properties &
bin/kafka-server-start.sh /etc/kafka/server3.properties &
步骤 3:验证集群状态
使用以下命令验证 Kafka 和 ZooKeeper 是否成功启动:
-
ZooKeeper:
bash深色版本echo stat | nc 192.168.1.101 2181 -
Kafka:
bash深色版本jps查看输出中是否有
QuorumPeerMain和Kafka进程。
步骤 4:创建主题并测试消息传递
1. 创建主题
使用 kafka-topics.sh 创建一个具有多个分区和副本的主题:
bin/kafka-topics.sh --create --topic test-topic --bootstrap-server 192.168.1.101:9092,192.168.1.102:9092,192.168.1.103:9092 --partitions 3 --replication-factor 3
2. 启动生产者
使用 kafka-console-producer.sh 向主题发送消息:
bin/kafka-console-producer.sh --broker-list 192.168.1.101:9092,192.168.1.102:9092,192.168.1.103:9092 --topic test-topic
然后你可以输入消息并按回车键发送。
3. 启动消费者
使用 kafka-console-consumer.sh 从主题读取消息:
bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.101:9092,192.168.1.102:9092,192.168.1.103:9092 --topic test-topic --from-beginning --group my-group
--from-beginning 参数表示从最早的消息开始消费,--group 参数指定了消费者组名称。

浙公网安备 33010602011771号