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

ini
深色版本
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 上:

bash
深色版本
echo "1" > /var/lib/zookeeper/myid

重复上述步骤,在 192.168.1.102192.168.1.103 上分别创建 myid 文件,内容分别为 23

3. 启动 ZooKeeper

在每台服务器上启动 ZooKeeper:

bash
深色版本
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:

bash
深色版本
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

    查看输出中是否有 QuorumPeerMainKafka 进程。

步骤 4:创建主题并测试消息传递

1. 创建主题

使用 kafka-topics.sh 创建一个具有多个分区和副本的主题:

bash
深色版本
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 向主题发送消息:

bash
深色版本
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 从主题读取消息:

bash
深色版本
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 参数指定了消费者组名称。

 
posted @ 2024-12-31 09:02  星云惊蛰  阅读(54)  评论(0)    收藏  举报