1.安装
在选择kafka版本时,注意jdk版本。1.7版本的jdk只能支持kafka 2.0.0之前的版本。
- 下载kafka
wget https://archive.apache.org/dist/kafka/0.10.1.0/kafka_2.10-0.10.1.0.tgz
- 启动zookeeper
./bin/zookeeper-server-start.sh ./config/zookeeper.properties #监听2181端口
- 启动kafka
./bin/kafka-server-start.sh ./config/server.properties
- 创建topic
./kafka-topics.sh --create --zookeeper centos:2181 --replication-factor 1 --partitions 1 --topic test
- 启动生产者
./bin/kafka-console-producer.sh --broker-list centos:9092 --topic test #主机名为centos
- 启动消费者
./bin/kafka-console-consumer.sh --bootstrap-server centos:9092 --topic test
./bin/kafka-console-consumer.sh --bootstrap-server centos:9092 --topic test --from-beginning #从头开始消费
上面两条指令没有指定消费者组,kafka服务会自动分配一个临时的消费者组。
如果要在创建消费者的时候就指定消费者组,使用consumer.properties
consumer.properties 中详细配置 见《kafka配置文件详解:consumer.properties》
./bin/kafka-console-consumer.sh --bootstrap-server centos:9092 --consumer.config ./config/consumer.properties
2.shell命令
- 查看topic列表
./bin/kafka-topics.sh --list --zookeeper centos:2181
- 查看特定topic详情
./bin/kafka-topics.sh --zookeeper centos:2181 --topic test --describe
- 查看consumer group列表
./bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server centos:9092 --list
- 查看特定consumer group 详情
./bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server centos:9092 --group console-consumer-1104 --describe
- 查看topic某分区偏移量最大(小)值
./bin/kafka-run-class.sh kafka.tools.GetOffsetShell --topic hive-mdatabase-hostsltable --time -1 --broker-list node86:9092 --partitions 0
- 若不指定partition,则会打印全部partition的offset消费情况
- time 指定为-1打印最大,-2打印最小
- 增加topic分区数
./bin/kafka-topics.sh --zookeeper centos:2181 --alter --topic test --partitions 10
如果test当前分区数小于10,那么此条指令不能执行成功。
因为topic的partition只能增加不能减小。
- 删除topic,慎用,只会删除zookeeper中的元数据,消息文件须手动删除
./bin/kafka-run-class.sh kafka.admin.DeleteTopicCommand --zookeeper centos:2181 --topic test
- 重置offset到某一固定时间点
./kafka-consumer-groups.sh --bootstrap-server 20.81.11.24:29002,20.81.11.25:29002,20.81.11.26:29002,20.81.11.27:29002,20.81.11.28:29002
--group bigdata_test1 --reset-offsets --topic Q_T_DATAFREEZE_BIGDATA --to-datetime 2021-04-07T00:00:00 --timeout 60000 --execute
测试
- topic单分区 ,consumer同组
两个消费者属同组,topic只有一个分区,有一个消费者(consumer2)始终处于空闲状态。 - topic单分区 ,consumer不同组
两个消费者属于不同组,都能消费到所有的数据。 - topic两个分区,consumer同组
topic 有两个分区,consumer1和consumer2轮询消费了所有的消息