kafka中的命令行操作以及分区副本问题

关于命令行操作(注:进行命令行操作之前的话务必将zookeeper全部开启)

1.查看当前kafka中现存的所有主题的名字

bin/kafka-topics.sh --zookeeper hadoop102:2181 --list

[root@hadoop102 kafka]# bin/kafka-topics.sh --zookeeper hadoop102:2181 --list
demo1
demo2

2.查看某个topic的详情,这里我查看的是demo2这个主题的详情

bin/kafka-topics.sh --zookeeper hadoop102:2181 --describe --topic xx主题

[root@hadoop102 kafka]# bin/kafka-topics.sh --zookeeper hadoop102:2181 --topic demo2 --describe
Topic:demo2 PartitionCount:3 ReplicationFactor:2 Configs:
Topic: demo2 Partition: 0 Leader: 2 Replicas: 2,1 Isr: 2,1
Topic: demo2 Partition: 1 Leader: 0 Replicas: 0,2 Isr: 0,2
Topic: demo2 Partition: 2 Leader: 1 Replicas: 1,0 Isr: 1,0
[root@hadoop102 kafka]#

3.创建一个主题

bin/kafka-topics.sh --zookeeper hadoop102:2181 --create --partitions xx个 --replication-factor xx个 --topic xx主题

参数解读:
2181:zookeeper的端口号,因为创建节点这类操作必须在zk上注册。
–partitions :定义分区数
–replication-factor 定义副本数

bin/kafka-topics.sh --zookeeper hadoop102:2181 --create  --partitions 3 --replication-factor 2    --topic    demo

4.删除一个topic

bin/kafka-topics.sh --zookeeper hadoop102:2181 --delete --topic demo2

注意需要将/opt/moudlu/kafka/conf/server.properties中设置delete.topic.enable=true否则只是标记删除没有实际删除

5.生产者发送消息到kafka集群

bin/kafka-console-producer.sh --broker-list hadoop102:9092 --topic xx主题

6.消费者接受消息

1)在0.11版本之前消费者的offset存储在zookeeper,虽然我们现在用的是0.11版本的kafka,但是zk还是能接受到消息的。

bin/kafka-console-consumer.sh \
--zookeeper hadoop102:2181 --topic first

2)在0.11版本之后含0.11消费者的offset存储在kafka集群中,如果用上面的连接zk来消费消息的话会出现
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [ bootstrap-server] instead of [zookeeper]
也就是推荐用bootstrap-server来连接

bin/kafka-console-consumer.sh   --bootstrap-server hadoop102:9092 --topic demo2

由于在日常的工作中修改分区用的特别少 这里我就不贴出来他的命令行操作了

接下来我们看一下关于kafka中的分区分配问题
我们可以先创建一个叫demo2的主题,其中包含3个分区和2个副本

bin/kafka-topics.sh --zookeeper hadoop102:2181 --create  --partitions 3 --replication-factor 2    --topic    demo2

创建好以后我们去describe一下它的具体信息,这里先强调一下我们刚才创建主题中有两个副本,按理说应该是一个leader加上2个副本为三个但其实是所谓的副本等于一个leader+多个follow,只不过一个是副本为leader,其余的都为follow,这里可以看到主题demo2有三个分区分别是0,1,2 关于Leader2,1,0这三个数字的意思是我们的leader存储在哪一台kafka机器上,因为我们用broker.id来唯一标识我们的kafka机器,这里我的kafka集群是3台。

在这里插入图片描述

这里我们看一下0号分区,从Replicas可以看到他有两个副本,最前面的那个是leader所在的broker的id号,往后的都是follow所在的broker的id号,
同理我们看一下1号分区,他的leader为brokerid号为0,follow在id号为2的机器上。

因为broker0,1,2分别代表的是我的hadoop102,103,104这三台机器,我们去分别查看一下对应的/kafka/logs(生产者的数据我配的是在这个路径下)下面的数据,注意这里系统命名的规则是主题加上分区号。

hadoop102等价broker0

在这里插入图片描述
hadoop103等价broker1

在这里插入图片描述

hadoop104等价broker2

在这里插入图片描述

由上图我们可以得到最终的分配方式为

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44080445/article/details/107337828
今日推荐