5个broker (1主4从)
安装目路/config/server.properties, 额外复制4份为 server-2.properties,server-3.properties,server-4.properties,server-5.properties
主要配置不同
broker.id=0
listeners=PLAINTEXT://127.0.0.1:9092
log.dirs=安装目路/logs/kafka-logs
zookeeper.connect=127.0.0.1:2181
broker.id=2
listeners=PLAINTEXT://127.0.0.1:9095
log.dirs=安装目路/logs/kafka-logs2
zookeeper.connect=127.0.0.1:2181
broker.id=3
listeners=PLAINTEXT://127.0.0.1:9097
log.dirs=安装目路/logs/kafka-logs3
zookeeper.connect=127.0.0.1:2181
broker.id=4
listeners=PLAINTEXT://127.0.0.1:9099
log.dirs=安装目路/logs/kafka-logs2
zookeeper.connect=127.0.0.1:2181
broker.id=5
listeners=PLAINTEXT://127.0.0.1:9101
log.dirs=安装目路/logs/kafka-logs2
zookeeper.connect=127.0.0.1:2181
运行这5个broker
.\bin\windows\kafka-server-start.bat .\config\server.properties
.\bin\windows\kafka-server-start.bat .\config\server-2.properties
.\bin\windows\kafka-server-start.bat .\config\server-3.properties
.\bin\windows\kafka-server-start.bat .\config\server-4.properties
.\bin\windows\kafka-server-start.bat .\config\server-5.properties
创建一个主题test,8个分区,3个副本
kafka-topics.bat --create --topic test --bootstrap-server localhost:9092 --partitions 8 --replication-factor 3
bootstrap-server 参数还可以接受多个服务器地址,以逗号分隔。这样可以指定多个 Kafka 服务器,以提供高可用性和负载均衡,如
--bootstrap-server localhost:9092,localhost:9095
,
–replication-factor 副本数是在创建主题时指定的,并且不能大于可用的 Broker 数量,即副本数<=可用broker数
,否则会报错如:Error while executing topic command : Replication factor: 4 larger than available brokers: 3
##查看特定主题的详细信息
kafka-topics.bat --bootstrap-server localhost:9092,localhost:9095 --describe --topic test
# 分布情况
Topic: test TopicId: 6jZrYsAxQOm7aFJwM--Uhw PartitionCount: 8 ReplicationFactor: 3 Configs:
Topic: test Partition: 0 Leader: 3 Replicas: 3,0,5 Isr: 3,0,5
Topic: test Partition: 1 Leader: 0 Replicas: 0,5,4 Isr: 0,5,4
Topic: test Partition: 2 Leader: 5 Replicas: 5,4,2 Isr: 5,4,2
Topic: test Partition: 3 Leader: 4 Replicas: 4,2,3 Isr: 4,2,3
Topic: test Partition: 4 Leader: 2 Replicas: 2,3,0 Isr: 2,3,0
Topic: test Partition: 5 Leader: 3 Replicas: 3,5,4 Isr: 3,5,4
Topic: test Partition: 6 Leader: 0 Replicas: 0,4,2 Isr: 0,4,2
Topic: test Partition: 7 Leader: 5 Replicas: 5,2,3 Isr: 5,2,3
在 Apache Kafka 中,副本数是指每个分区的备份数量。副本数是在创建主题时指定的,并且不能大于可用的 Broker 数量,否则会报错,
kafka-topics.sh--create --bootstrap-server 127.0.0.1:9092 --replication-factor 4 --partitions 4 --topic test2
.
旧版本
./kafka-topics.sh --create --topic my-topic --zookeeper zookeeper:2181 --partitions 8 --replication-factor 3
如果使用旧版本api 会报 Exception in thread "main" joptsimple.UnrecognizedOptionException: zookeeper is not a recognized option
:
在最新的 Apache Kafka 版本中/,--zookeeper 参数已被弃用
,使用--bootstrap-server
,因为 Kafka 已经从 ZooKeeper 转移到使用内置的 Kafka Controller 进行集群管理。因此,在运行 Kafka 命令时不再支持 --zookeeper 参数。
如果你想采用轮询机制将副本和分区分布在5台 Broker 上,可以按照以下步骤进行:
确定每个分区的首领副本(Leader Replica):首先,从 Broker 列表中选择一个 Broker 作为每个分区的首领副本。
轮询分配副本到其他 Broker:对于每个分区,从未被选为首领副本的 Broker 中按照轮询机制选择两个副本(复制副本)。确保每个 Broker 所分配的副本数量尽可能相等,以实现负载均衡
。
确定副本的位置:根据上述分配过程,确定每个分区的首领副本和复制副本所在的 Broker。
下面是一个具体的示例分配方案:
Topic: topic-1
分区数:8
副本数:3
Broker列表:broker-1、broker-2、broker-3、broker-4、broker-5
具体分区和副本的分布如下:
分区 0:首领副本 - broker-1,复制副本 - broker-2,broker-3
分区 1:首领副本 - broker-2,复制副本 - broker-3,broker-4
分区 2:首领副本 - broker-3,复制副本 - broker-4,broker-5
分区 3:首领副本 - broker-4,复制副本 - broker-5,broker-1
分区 4:首领副本 - broker-5,复制副本 - broker-1,broker-2
分区 5:首领副本 - broker-1,复制副本 - broker-2,broker-3
分区 6:首领副本 - broker-2,复制副本 - broker-3,broker-4
分区 7:首领副本 - broker-3,复制副本 - broker-4,broker-5
根据轮询机制,每个 Broker 上的副本数量都相等,并且每个分区的副本尽量分布在不同的 Broker 上。
需要注意的是,这是一种示例分配方案,实际情况会受多个因素影响,如可用的 Broker 数量、负载情况、网络拓扑等。
你可以使用 Kafka 提供的工具或管理API来执行这种分配策略。请确保在进行任何更改之前进行全面的测试,并备份关键数据以防意外情况发生。