1、下载kafka,使用自带的zookeeper。
2、以三台机器为例:
- broker1 (IP: 192.168.1.1)
- broker2 (IP: 192.168.1.2)
- broker3 (IP: 192.168.1.3)
3、配置zookeeper,目录修改为自己的
dataDir=/var/lib/zookeeper
clientPort=2181
server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888
initLimit=10
syncLimit=5
参数解释:
- tickTime:Zookeeper 中的基本时间单位(毫秒)。它用于心跳和超时等机制。
- dataDir:存储内存数据库快照和事务日志的目录。
- clientPort:客户端连接 Zookeeper 的端口。
- initLimit:Zookeeper 启动时允许 followers 完成同步的最大 tick 数。
- syncLimit:leader 和 follower 之间的消息同步最长允许的 tick 数。
- server.X:指定集群中各个 Zookeeper 节点的信息,其中 X 是该节点的 ID,192.168.1.X 是该节点的 IP 地址,2888 是 follower 连接到 leader 的端口,3888 是用于 leader 选举的端口。
在每台机器的 dataDir 目录中创建一个名为 myid 的文件,文件内容为该机器的 ID(例如 1、2 或 3):
echo "1" > /var/lib/zookeeper/myid # 在 broker1 上
echo "2" > /var/lib/zookeeper/myid # 在 broker2 上
echo "3" > /var/lib/zookeeper/myid # 在 broker3 上
4、启动zookeeper,切换到自己的目录执行,-daemon表示后台启动
./bin/zookeeper-server-start.sh -daemon ../config/zookeeper.properties
5、配置 Kafka Broker
broker.id=1 # 在 broker1 上,其他机器为 2 和 3
listeners=PLAINTEXT://192.168.1.1:9092 # 在 broker1 上,其他机器为 192.168.1.2:9092 和 192.168.1.3:9092
log.dirs=/var/lib/kafka-logs
zookeeper.connect=192.168.1.1:2181,192.168.1.2:2181,192.168.1.3:2181
6、启动 Kafka Broker,后台启动
./bin/kafka-server-start.sh -daemon ../config/server.properties
7、创建测试主题:
/usr/local/kafka/bin/kafka-topics.sh --create
--topic my-new-topic
--bootstrap-server 192.168.1.1:9092,192.168.1.2:9092,192.168.1.3:9092
--partitions 3
--replication-factor 2
8、查看主题:
/usr/local/kafka/bin/kafka-topics.sh
--describe
--topic my-new-topic
--bootstrap-server 192.168.1.1:9092,192.168.1.2:9092,192.168.1.3:9092
该命令会输出以下结果:
Topic: my-new-topic PartitionCount: 3 ReplicationFactor: 2 Configs:
Topic: my-new-topic Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2
Topic: my-new-topic Partition: 1 Leader: 2 Replicas: 2,3 Isr: 2,3
Topic: my-new-topic Partition: 2 Leader: 3 Replicas: 3,1 Isr: 3,1
输出解释:
- Topic:主题名称。
- PartitionCount:分区数量。
- ReplicationFactor:副本因子。
- Configs:主题的配置信息(如果有的话)。
- Partition:分区编号。
- Leader:分区的主节点 broker ID,负责所有读写操作。
- Replicas:存储该分区副本的 broker ID 列表。
- Isr:同步副本集合(In-Sync Replicas),即当前与 Leader 同步的副本 broker ID 列表。