kafka的命令行常用基本操作+参数原理解析

0,操作命令帮助:
[isea@hadoop102 kafka]$ bin/kafka-console-consumer.sh 其他的也OK


1,删除操作:
[isea@hadoop108 kafka]$bin/kafka-topics.sh --zookeeper hadoop108:2181 --delete  --topic first
默认是标记删除,如果要真的删除,需要设置:delete.topic.enable=true 

2,创建一个主题,该主题有三个分区,有两个副本
bin/kafka-topics.sh --zookeeper hadoop108:2181 --create --topic first --partitions 3 --replication-factor 2

3,查看当前有多少主题:
[isea@hadoop108 kafka]$ bin/kafka-topics.sh --zookeeper hadoop108:2181 --list 
first
因为主题相关的信息都存储在zookeeper中,所以我们需要连接到zookeeper集群,获取到主题相关的数据

4,查看某个topic的详情:
[isea@hadoop108 kafka]$ bin/kafka-topics.sh --zookeeper hadoop108:2181 --describe --topic first
Topic:first	PartitionCount:3	ReplicationFactor:2	Configs:
	Topic: first	Partition: 0	Leader: 9	Replicas: 9,10	Isr: 9,10
	Topic: first	Partition: 1	Leader: 10	Replicas: 10,8	Isr: 10,8
	Topic: first	Partition: 2	Leader: 8	Replicas: 8,9	Isr: 8,9

解释:
这里,主题是名称是first,分区0,的leader在9上,副本在9 和10 上,分区1的leader在10上,副本在8
和10 上;分区2的leader在8上,副本在8,9 上;ISR:in sync replication,正在同步的副本;

如此此时我们kill掉10;
bin/kafka-topics.sh --zookeeper hadoop108:2181 --describe --topic first
Topic:first	PartitionCount:3	ReplicationFactor:2	Configs:
	Topic: first	Partition: 0	Leader: 9	Replicas: 9,10	Isr: 9
	Topic: first	Partition: 1	Leader: 8	Replicas: 10,8	Isr: 8
	Topic: first	Partition: 2	Leader: 8	Replicas: 8,9	Isr: 8,9
此时,分区1的leader变为8
等待一会时间之后,分区会自平衡,所谓的自平衡就是leader均匀的分布,在本题中就是partition2的
leader会重新恢复为10,如果没有或者你等不及了,可以手动执行下面这条命令实现平衡:

5,生产数据:数据的生产和zookeeper没有关系
[isea@hadoop108 kafka]$ bin/kafka-console-producer.sh --broker-list hadoop108:9092 --topic first
>hello
>kafka

生产数据的时候需要获得消息队列集群的broker,这样才能知道生产完毕的数据放在哪里,所以需要指定
kafka消息队列的集群在集群通信的端口号。初此之外,还需要指定该数据是在哪个分区的。



6,数据的消费,需要连接到zookeeper,这样才能获取上次消费的offset,从而决定从哪里消费,还要指定消费的主题
[isea@hadoop108 kafka]$ bin/kafka-console-consumer.sh --zookeeper hadoop108:2181 --from-beginning -topic first
hello
kafka

在生产者中生产数据之后,在消费者端能够接收到数据

我们在查看一下数据:
[isea@hadoop108 kafka]$ bin/kafka-topics.sh --zookeeper hadoop108:2181 --describe --topic first
Topic:first	PartitionCount:3	ReplicationFactor:2	Configs:
	Topic: first	Partition: 0	Leader: 9	Replicas: 9,10	Isr: 9,10
	Topic: first	Partition: 1	Leader: 10	Replicas: 10,8	Isr: 8,10
	Topic: first	Partition: 2	Leader: 8	Replicas: 8,9	Isr: 8,9

当前的机器是8,分区2的数据,保存了两份,在8 9 两台机器上,leader在8,所以我们查看一下logs下的
first2,下面是有数据的,为kafka;
[isea@hadoop108 first-2]$ strings 00000000000000000000.log 
kafka

对于分区0 ,在9 10 机器上有数据信息,leader在9上,所以查看一下logs下面的first0,有数据为hello
hello[isea@hadoop109 first-0]$ strings 00000000000000000000.log 
hello

分析:我们产生的消息是 hello 和 kafka,这是一份完整的数据被标记为first主题,该first主题有三个分
区,被标记为first主题的每一粒数据,进入消息队列的时候将会被存储到这三个分区中的一个,这里hello被
存储到了分区0,分区0在9号机器上,同时分区0还有一个备份在10号机器上;而kafka被存储到了分区1,在10
号机器上,同时分区1在8号机器上还有一个备份


在kafka0.9及其之后,kafka消费者做了相应的变化,将原本放在zookeeper中的offset数据放在了kafka的
集群本地,于是我们还可以使用下面的客户端命令来进行消费:
[isea@hadoop101 kafka]$ bin/kafka-console-consumer.sh --bootstrap-server hadoop101:9092 --topic first 
hello
kafka

此时我们在查看一下log日志的:
[isea@hadoop101 logs]$ tree
.
├── cleaner-offset-checkpoint
├── __consumer_offsets-0
│   ├── 00000000000000000000.index
│   ├── 00000000000000000000.log
│   ├── 00000000000000000000.timeindex
│   └── leader-epoch-checkpoint
发现offset的信息存储在了log中,而且偏移量的信息保存在了集群中,也即所有的机器中,但是整个集群合
起来是所有的偏移量的信息

 

你可能感兴趣的:(kafka)