KafKa 分区,副本实战

一主多从

5个broker (1主4从)
安装目路/config/server.properties, 额外复制4份为 server-2.properties,server-3.properties,server-4.properties,server-5.properties

主要配置不同

  • server.properties
broker.id=0
listeners=PLAINTEXT://127.0.0.1:9092
log.dirs=安装目路/logs/kafka-logs
zookeeper.connect=127.0.0.1:2181
  • server-2.properties
broker.id=2
listeners=PLAINTEXT://127.0.0.1:9095
log.dirs=安装目路/logs/kafka-logs2
zookeeper.connect=127.0.0.1:2181
  • server-3.properties
broker.id=3
listeners=PLAINTEXT://127.0.0.1:9097
log.dirs=安装目路/logs/kafka-logs3
zookeeper.connect=127.0.0.1:2181
  • server-4.properties
broker.id=4
listeners=PLAINTEXT://127.0.0.1:9099
log.dirs=安装目路/logs/kafka-logs2
zookeeper.connect=127.0.0.1:2181
  • server-5.properties
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来执行这种分配策略。请确保在进行任何更改之前进行全面的测试,并备份关键数据以防意外情况发生。

你可能感兴趣的:(kafka,分布式)