topic相关

0)参数带多个主机
作用:通过主机找kafka,如果102挂了,可以找103…更保险,相当于给kafka配了多个备用端口

  1. --bootstrap-server borker主机:9092,..多个

1)查看当前服务器中的所有topic

  1. bin/kafka-topics.sh --zookeeper hadoop102:2181 --list
  2. bin/kafka-topics.sh --list --bootstrap-server borker主机:9092,..

2)查看topic详细信息:

  1. bin/kafka-topics.sh --zookeeper hadoop102:2181 --describe--topic first
  2. bin/kafka-topics.sh --describe --topic topic名称 --bootstrap-server borker主机:9092,..

3)创建topic
创建的副本数要求:
副本数不能大于节点数,否则报错。
原因:当一个节点有两个相同副本时,节点挂了两个都会每,所以没有意义

  1. 旧:
  2. $ bin/kafka-topics.sh --zookeeper hadoop102:2181 --create --replication-factor 3 --partitions 1 --topic first
  3. 新:
  4. bin/kafka-topics.sh --create --topic topic名称 --partitions 分区数 --replication-factor 副本数 --bootstrap-server borker主机:9092,..

4)删除topic

  1. 旧:
  2. bin/kafka-topics.sh --zookeeper hadoop102:2181 --delete --topic first
  3. 新:
  4. bin/kafka-topics.sh --delete --topic topic名称 --bootstrap-server borker主机:9092,..

需要server.properties中设置delete.topic.enable=true否则只是标记删除(现在版本已经默认为true)。

5)修改topic信息[只能修改分区数,而且是只能增加分区数,不能减少分区数]
不能减少分区数的原因:
因为每个segment有时间索引,而kafka消息队列只支持追加数据,
如果要减少分区,那么分区中的数据会被追加到其他分区尾部,而时间索引有可能与分区中的数据造成混乱。

  1. bin/kafka-topics.sh --zookeeper hadoop102:2181 --alter --topic first --partitions 6
  2. bin/kafka-topics.sh --alter --topic topic名称 --bootstrap-server borker主机:9092,.. --partitions 分区数

生产者相关

发送消息(broker的指定端口号是9092)

  1. [atguigu@hadoop102 kafka]$bin/kafka-console-producer.sh --topic topic名称 --broker-list borker主机:9092,..
  2. >hello world
  3. >atguigu atguigu

消费者相关

生成消费者组(随机或指定)进行消费,

  1. bin/kafka-console-consumer.sh --zookeeper hadoop102:2181 --topic first
  2. bin/kafka-console-consumer.sh --topic topic名称 --bootstrap-server borker主机:9092,..
  3. bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic first
  4. bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --from-beginning --topic first

—from-beginning:会把主题中以往所有的数据都读取出来。
原理:
kafka消费的时候把消费的数据偏移量记录在_comsumer_offsets上,是需要先消费才能记录
所以第一次消费数据的时候是没有数据的,第二次才能消费上一次消费的offset+1

要想看到第一次消费的数据只能用—from-beginning指令,而且只有看第一次的有效,这时因为是从第二次的__comsumer_offsets拉取,这时是没数据的,所以看不到。(需要指定消费者组才有效,不指定只会自动创建一个新的消费组,重新拉取)

指定消费者组

  1. bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --from-beginning --topic first --group g1

查看所有消费者组详情,消费到每个topic的分区的哪个offset

  1. kafka-consumer-groups.sh --all-groups --all-topic --describe --bootstrap-server hadoop102:9092

image.png

数据相关

  1. bin/kafka-dump-log.sh --files 待查看的文件路径/00...index --print-data-log
  2. bin/kafka-dump-log.sh --files 待查看的文件路径/00...log--print-data-log