kafka 常用操作

启动zookeeper,每个节点都要操作

nohup ./bin/zkServer.sh start > zookeeper.log 2>&1 &

启动kafka,每个节点都要操作

nohup bin/kafka-server-start.sh config/server.properties > logs/kafka-server.log 2>&1 & 

创建topic

bin/kafka-topics.sh --create --zookeeper 172.17.11.120:2181,172.17.11.117:2181,172.17.11.118:2181 --replication-factor 1 --partitions 1 --topic TOPIC-20160504-1200

创建 producer

bin/kafka-console-producer.sh --broker-list 172.17.11.120:9092,172.17.11.117:9092,172.17.11.118:9092 --topic TOPIC-20160504-1200

创建consumer

bin/kafka-console-consumer.sh --zookeeper 172.17.11.120:2181,172.17.11.117:2181,172.17.11.118:2181 --topic TOPIC-20160504-1200 --from-beginning

修改partitions数量:使用 –alter

bin/kafka-topics.sh --zookeeper 172.17.11.120:2181,172.17.11.117:2181,172.17.11.118:2181 --alter  --partitions 2 --topic TOPIC-20160504-1200
WARNING: If partitions are increased for a topic that has a key, the partition logic or ordering of the messages will be affected
Adding partitions succeeded!

在zookeeper查看一下,可以看到partitions变为2个

[zk: localhost:2181(CONNECTED) 21] ls /brokers/topics/TOPIC-20160504-1200/partitions
[1, 0]

查看partition状态信息

[zk: localhost:2181(CONNECTED) 7] get /brokers/topics/TOPIC-20160504-1200/partitions/1/state

工具监控kafka-manager

nohup ./kafka-manager -Dconfig.file=../conf/application.conf -Dhttp.port=9001 >/dev/null 2>&1 &

segment:partition存储的最小单位
segment可以按时间划分或按大小划分
配置文件中log.dirs指定了数据存储位置

这里写图片描述

Replicas: 显示的是副本所在broker
Isr: 副本同步列表,列表中的副本会在leader当掉时被选举为新的leader,现在都是只有一个副本
当一个节点当掉,会在所有的同步列表中移除这个节点,该节点为leader的partition会选举新的leader,当这个节点重启后,一切回复之前的样子,leader会变回这个节点,isr列表也会加入这个节点,数据也会迁移过来

[root@master bin]# ./kafka-topics.sh --describe --topic TOPIC-20160504-1200 --zookeeper 172.17.11.120:2181,172.17.11.117:2181,172.17.11.118:2181

这里写图片描述

kafka_consumer_groups.sh

由于Zookeeper并不适合大批量的频繁写入操作,新版Kafka已推荐将consumer的位移信息保存在Kafka内部的topic中,即__consumer_offsets topic,并且默认提供了kafka_consumer_groups.sh脚本供用户查看consumer信息

查看各分区Offset(该topic有4个分区)
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 172.17.11.120:9092,172.17.11.117:9092,172.17.11.118:9092 --topic TOPIC-20160504-1200 --time -1
TOPIC-20160504-1200:2:4
TOPIC-20160504-1200:1:203
TOPIC-20160504-1200:3:8
TOPIC-20160504-1200:0:71

创建console consumer group

bin/kafka-console-consumer.sh --bootstrap-server 172.17.11.120:9092,172.17.11.117:9092,172.17.11.118:9092 --topic TOPIC-20160504-1200 --from-beginning --new-consumer

获取该consumer group的group id(不要停掉consumer group)

bin/kafka-consumer-groups.sh --bootstrap-server 172.17.11.120:9092,172.17.11.117:9092,172.17.11.118:9092 --list --new-consumer
console-consumer-59518 (可根据该id查询它的位移信息)

查询__consumer_offsets topic所有内容(先要在consumer.properties中设置exclude.internal.topics=false)
默认情况下__consumer_offsets有50个分区,如果系统中consumer group很多,那么这个命令的输出结果会很多

bin/kafka-console-consumer.sh --topic __consumer_offsets --zookeeper 172.17.11.120:2181,172.17.11.117:2181,172.17.11.118:2181 --formatter "kafka.coordinator.GroupMetadataManager\$OffsetsMessageFormatter" --consumer.config config/consumer.properties --from-beginning

这里写图片描述

获取指定consumer group的offset信息
Kafka使用下面公式计算该group的offset保存在__consumer_offsets的哪个分区
Math.abs(groupID.hashCode()) % numPartitions
代入之前的group id,计算得 9

bin/kafka-simple-consumer-shell.sh --topic __consumer_offsets --partition 9 --broker-list 172.17.11.120:9092,172.17.11.117:9092,172.17.11.118:9092 --formatter "kafka.coordinator.GroupMetadataManager\$OffsetsMessageFormatter"

结果和查询__consumer_offsets topic所有内容类似,但只输出了该group id的日志
可以发现每一条日志格式都是[Group, Topic, Partition]::[OffsetMetadata[Offset, Metadata], CommitTime, ExpirationTime]
这里的offset信息是目前已消费的offset

kafka运行jar包方式

1.

[root@master bin]# ./kafka-run-class.sh -jar ../test-0.0.1-SNAPSHOT.jar main类的全路径名(如果到处jar包时已经指定则不需要写)

2.
直接用java -jar运行jar包
3.
把jar包放到kafka的libs目录下,可以这样运行

./kafka-run-class.sh  main类的全路径名
例如  
./kafka-run-class.sh  com.horizon.kafka.v010.Producer
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值