一、概述
1.定义
传统定义:kafka是一个分布式的基于发布/订阅模式的消息队列
最新定义:kafka是一个开源的分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用
2.应用场景
缓存/消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致情况
解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束
异步通信:允许用户把一个消息放入队列,但不立即处理,在需要的时候再处理
3.消息队列模式
点对点模式:消费者主动拉取数据,消息收到后消除消息
发布/订阅模式:可以有多个topic;消费者消费后不删除数据;每个消费者相互独立,都可以消费到数据
4.基础架构
(1) Producer: 消息生产者,就是向 Kafka broker 发消息的客户端。
(2) Consumer: 消息消费者,向 Kafka broker 取消息的客户端。
(3) Consumer Group(CG): 消费者组,由多个 consumer 组成。 消费者组内每个消
费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不
影响。 所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
(4) Broker: 一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个
broker 可以容纳多个 topic。
(5) Topic: 可以理解为一个队列, 生产者和消费者面向的都是一个 topic。
(6) Partition: 为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服
务器)上, 一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。
(7) Replica: 副本。 一个 topic 的每个分区都有若干个副本,一个 Leader 和若干个
Follower。
(8) Leader: 每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数
据的对象都是 Leader。
( 9) Follower: 每个分区多个副本中的“从”,实时从 Leader 中同步数据,保持和
Leader 数据的同步。 Leader 发生故障时,某个 Follower 会成为新的 Leader。
注:zk上查看brokers信息:ls /kafka/brokers/ids topic信息:ls /kafka/topics/....
二、安装
1.官网下载地址:https://kafka.apache.org/downloads
2.安装脚本:
3.配置说明:server.properties
#broker 的全局唯一编号,不能重复,只能是数字。 broker.id=0 #listeners:外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。一般公司内网的kafka集群只需要配置这个就行了 listeners=PLAINTEXT://11.0.1.143:9092 #advertised.listeners: Advertise的含义表示宣称的、公布的,就是组监听器是 Broker 用于对外发布的。涉及到外网kafka集群时,还需要配置这个。只要是涉及到外网访问的,必须要设置这个,否则Consumer或Producer连接不到kafka的服务 #advertised.listeners=PLAINTEXT://11.0.1.143:9092 #处理网络请求的线程数量 num.network.threads=3 #用来处理磁盘 IO 的线程数量 num.io.threads=8 #发送套接字的缓冲区大小 socket.send.buffer.bytes=102400 #接收套接字的缓冲区大小 socket.receive.buffer.bytes=102400 #请求套接字的缓冲区大小 socket.request.max.bytes=104857600 #kafka 运行日志(数据)存放的路径,路径不需要提前创建, kafka 自动帮你创建,可以 配置多个磁盘路径,路径与路径之间可以用", "分隔 log.dirs=/opt/module/kafka/datas #topic 在当前 broker 上的分区个数 num.partitions=1 #用来恢复和清理 data 下数据的线程数量 num.recovery.threads.per.data.dir=1 # 每个 topic 创建时的副本数,默认时 1 个副本 offsets.topic.replication.factor=1 #segment 文件保留的最长时间,超时将被删除 log.retention.hours=168 #每个 segment 文件的大小,默认最大 1G log.segment.bytes=1073741824 # 检查过期数据的时间,默认 5 分钟检查一次是否数据过期 log.retention.check.interval.ms=300000 #配置连接 Zookeeper 集群地址(在 zk 根目录下创建/kafka,方便管理) zookeeper.connect=zk01:2181,zk02:2181,zk03:2181/ka fka
4.服务启停(需zk先启动)
bin/kafka-server-start.sh -daemon config/server.properties
bin/kafka-server-stop.sh
启停脚本:
#! /bin/bash case $1 in "start"){ for i in kf1 kf2 kf3 do echo " --------启动 $i Kafka-------" ssh $i "/data/apps/kafka/bin/kafka-server-start.sh -daemon /data/apps/kafka/config/server.properties" done };; "stop"){ for i in kf1 kf2 kf3 do echo " --------停止 $i Kafka-------" ssh $i "/data/apps/kafka/bin/kafka-server-stop.sh " done };; esac
注:先停止kafka再关闭zk,不然kafka没办法获取停止进程的信息,只能手动杀死kafka进程
配置service
[Unit] Description = Apache Kafka by Confluent Wants = After = network.target [Service] Type = simple Environment=KAFKA_HOME=/data/apps/kafka Environment=LOG_DIR=/data/logs/kafka Environment='KAFKA_HEAP_OPTS=-Xmx2G -Xms2G' Environment=JMX_PORT=1097 ExecStart = /data/apps/kafka/bin/kafka-server-start.sh /data/apps/kafka/config/server.properties ExecStop = /data/apps/kafka/bin/kafka-server-stop.sh KillMode = process User = yq RestartSec = 5 LimitNOFILE=655360 [Install] WantedBy = multi-user.target
三、使用
1.命令操作
操作主题命令参数:kafka-topics.sh --help
--bootstrap-server :连接kafka broker主机名和端口号
--topic: 操作的topic
--create/delete/alter/list/describe : 创建、删除、修改、查看所有主题、查看主题详细信息
--partitions : 设置分区数
--replication-factor :设置分区副本
--config : 更新系统默认配置
示例:
创建topic:kafka-topics.sh --bootstrap-server localhost:9092 --create --partitions 1 --replication-factor 3 --topic mytest
注意:实测副本数不能超过broker数量
查看topic详情: kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic mytest
修改分区数:kafka-topics.sh --bootstrap-server localhost:9092 --alter --partitions 3 --topic mytest
注:分区数只能增加不能减少
减少分区报错:
[root@kf1 bin]# kafka-topics.sh --bootstrap-server localhost:9092 --alter --partitions 2 --topic mytest Error while executing topic command : Topic currently has 3 partitions, which is higher than the requested 2. [2022-10-19 09:27:01,826] ERROR org.apache.kafka.common.errors.InvalidPartitionsException: Topic currently has 3 partitions, which is higher than the requested 2. (kafka.admin.TopicCommand$)
2.生产者
(1)发送消息:kafka-console-producer.sh --bootstrap-server localhost:9092 --topic mytest
(2)消费消息:kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mytest
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mytest --from-beginning
参数:--from-beinning 从头开始消费(默认最新消息消费)
--group 指定消费组名称
(2)发送原理
在消息发送的过程中,涉及到了两个线程——main 线程和 Sender 线程。在 main 线程中创建了一个双端队列 RecordAccumulator。 main 线程将消息发送给 RecordAccumulator,
Sender 线程不断从 RecordAccumulator 中拉取消息发送到 Kafka Broke
参考名称 | 描述 |
bootstrap.servers | broker地址 |
key.serializer和value.serializer | 指定发送消息的key和value的序列化类型。一定要写全类名 |
buffer.memory | RecordAccumulator缓冲区总大小,默认32M |
batch.size |
缓冲区一批数据最大值, 默认 16k。适当增加该值,可以提高吞吐量,但是如果该值设置太大,会导致数据传输延迟增加 |
linger.ms | 如果数据迟迟未达到 batch.size, sender 等待 linger.time之后就会发送数据。单位 ms, 默认值是 0ms,表示没有延迟。 生产环境建议该值大小为 5-100ms 之间。 |
acks |
0:生产者发送过来的数据,不需要等数据落盘应答。 |
max.in.flight.requests.per.connection | 允许最多没有返回 ack 的次数, 默认为 5,开启幂等性要保证该值是 1-5 的数字。 |
retries |
当消息发送出现错误的时候,系统会重发消息。 retries表示重试次数。 默认是 int 最大值, 2147483647。如果设置了重试,还想保证消息的有序性,需要设置MAX_IN_FLIGHT_REQUESTS_PER_CONNECTION=1否则在重试此失败消息的时候,其他的消息可能发送成功了。 |
retry.backoff.ms | 两次重试之间的时间间隔,默认是 100ms。 |
enable.idempotence | 是否开启幂等性, 默认 true,开启幂等性。 |
compression.type | 生产者发送的所有数据的压缩方式。 默认是 none,也就是不压缩。支持压缩类型: none、 gzip、 snappy、 lz4 和 zstd。 |
(3) 生产者分区
分区好处:便于合理使用存储资源 ,每个分区在一个broker上存储,可以把海量的数据按照分区切割成一块一块数据存储在多个broker上。合理控制分区任务,可以实现负载均衡的效果。 提高并行度,生产者可以以分区为单位发送数据;消费者可以以分区单位进行消费数据
(4)生产者提高吞吐量
batch.size: 批次大小,默认16k
linger.ms: 等待时间,需改为5-100ms
compression.type: 压缩snappy
RecordAccumulator: 缓冲区大小,修改为64m
(5)数据可靠性
ack=0: 生产者发送过来的数据不管了,可靠性差,效率高
ack=1:生产者发送过来的数据leader应答,可靠性中等,效率中等
ack=-1 生产者发送过来的数据leader和ISR队列种所有Follwer应答,可靠性高,效率低
生产建议:ack=0少用; ack=1 用于日志接收;ack=-1 ,用于传输和钱等数据,可靠性比较高场景
(6)数据去重
幂等性:producer不论像broker发送多少次重复数据,broker端指挥持久一条,保证了不重复
开启参数:enable.idempotence 默认true,false关闭
事务
(7) 数据有序
单分区内有序,多分区 ,分区和分区之间无序
(8)数据乱序
kafka在1.x版本之前保证数据单分区有序, 条件如下:
max.in.flight.requests.per.connection=1( 不需要考虑是否开启幂等性) 。
kafka在1.x及以后版本保证数据单分区有序, 条件如下:
开启幂等性:
max.in.flight.requests.per.connection需要设置小于等于5。
未开启幂等性
max.in.flight.requests.per.connection需要设置为1。
原因说明:因为在kafka1.x以后,启用幂等后, kafka服务端会缓存producer发来的最近5个request的元数据,
故无论如何,都可以保证最近5个request的数据都是有序的。
3.消费者
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mytest --from-beginning
4.broker
(1)broker重要参数:
参数名称 | 描述 |
replica.lag.time.max.ms | ISR 中, 如果 Follower 长时间未向 Leader 发送通信请求或同步数据,则该 Follower 将被踢出 ISR。该时间阈值, 默认 30s |
auto.leader.rebalance.enable | 默认是 true。 自动 Leader Partition 平衡。 |
leader.imbalance.per.broker.percentag | 默认是 10%。 每个 broker 允许的不平衡的 leader的比率。如果每个 broker 超过了这个值,控制器会触发 leader 的平衡。 |
leader.imbalance.check.interval.seconds | 默认值 300 秒。检查 leader 负载是否平衡的间隔时间。 |
log.segment.bytes | Kafka 中 log 日志是分成一块块存储的,此配置是指 log 日志划分 成块的大小, 默认值 1G。 |
log.index.interval.bytes |
默认 4kb, kafka 里面每当写入了 4kb 大小的日志(.log),然后就往 index 文件里面记录一个索引。 |
log.retention.hours | Kafka 中数据保存的时间, 默认 7 天。 |
log.retention.minutes | Kafka 中数据保存的时间, 分钟级别,默认关闭。 |
log.retention.ms | Kafka 中数据保存的时间, 毫秒级别,默认关闭。 |
log.retention.check.interval.ms |
检查数据是否保存超时的间隔, 默认是 5 分钟。 |
log.retention.bytes | 默认等于-1,表示无穷大。 超过设置的所有日志总大小,删除最早的 segment。 |
log.cleanup.policy | 默认是 delete,表示所有数据启用删除策略;如果设置值为 compact,表示所有数据启用压缩策略。 |
num.io.threads | 默认是 8。 负责写磁盘的线程数。整个参数值要占总核数的 50%。 |
num.replica.fetchers | 副本拉取线程数,这个参数占总核数的 50%的 1/3 |
num.network.threads | 默认是 3。 数据传输线程数,这个参数占总核数的50%的 2/3 。 |
log.flush.interval.messages |
强制页缓存刷写到磁盘的条数,默认是 long 的最大值, 9223372036854775807。一般不建议修改,交给系统自己管理。 |
log.flush.interval.ms | 每隔多久,刷数据到磁盘,默认是 null。一般不建议修改,交给系统自己管理。 |
(2) 新增broker
新部署kafka,或者虚机克隆一台(克隆后的节点一定删除kafka所有data 、logs数据)
修改server.properties配置broker.id,保证id唯一性
查看zk 新增broker信息:/data/apps/zookeeper/bin/zkCli.sh 查看:ls /kafka/brokers/ids
执行负载均衡操作(增加副本存储):
a.创建一个均衡的主题
[root@kf1 sh]# cat topics-to-move.json { "topics": [ {"topic": "mytest"} ], "version": 1 }
b.生产负载均衡计划
[root@kf1 sh]# kafka-reassign-partitions.sh --bootstrap-server kf2:9092 --topics-to-move-json-file topics-to-move.json --broker-list "1,2,3,4" --generate Current partition replica assignment {"version":1,"partitions":[{"topic":"mytest","partition":0,"replicas":[3,2,1],"log_dirs":["any","any","any"]},{"topic":"mytest","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"mytest","partition":2,"replicas":[2,3,1],"log_dirs":["any","any","any"]}]} Proposed partition reassignment configuration {"version":1,"partitions":[{"topic":"mytest","partition":0,"replicas":[3,4,1],"log_dirs":["any","any","any"]},{"topic":"mytest","partition":1,"replicas":[4,1,2],"log_dirs":["any","any","any"]},{"topic":"mytest","partition":2,"replicas":[1,2,3],"log_dirs":["any","any","any"]}]}
c.创建副本存储计划(内容是上面Proposed partition reassignment configuration下内容)
[root@kf1 sh]# cat increase-replication-factor.json {"version":1,"partitions":[{"topic":"mytest","partition":0,"replicas":[3,4,1],"log_dirs":["any","any","any"]},{"topic":"mytest","partition":1,"replicas":[4,1,2],"log_dirs":["any","any","any"]},{"topic":"mytest","partition":2,"replicas":[1,2,3],"log_dirs":["any","any","any"]}]}
d.执行副本计划
[root@kf1 sh]# kafka-reassign-partitions.sh --bootstrap-server kf2:9092 --reassignment-json-file increase-replication-factor.json --execute Current partition replica assignment {"version":1,"partitions":[{"topic":"mytest","partition":0,"replicas":[3,2,1],"log_dirs":["any","any","any"]},{"topic":"mytest","partition":1,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"mytest","partition":2,"replicas":[2,3,1],"log_dirs":["any","any","any"]}]} Save this to use as the --reassignment-json-file option during rollback Successfully started partition reassignments for mytest-0,mytest-1,mytest-2
e.验证副本存储计划
[root@kf1 sh]# kafka-reassign-partitions.sh --bootstrap-server kf2:9092 --reassignment-json-file increase-replication-factor.json --verify Status of partition reassignment: Reassignment of partition mytest-0 is still in progress. Reassignment of partition mytest-1 is still in progress. Reassignment of partition mytest-2 is completed.
[root@kf1 sh]# kafka-reassign-partitions.sh --bootstrap-server kf2:9092 --reassignment-json-file increase-replication-factor.json --verify Status of partition reassignment: Reassignment of partition mytest1-0 is completed. Reassignment of partition mytest1-1 is completed. Reassignment of partition mytest1-2 is completed. Reassignment of partition mytest1-3 is completed.
(3)节点退役(减少副本存储)
[root@kf1 sh]# vim topics-to-move.json [root@kf1 sh]# kafka-reassign-partitions.sh --bootstrap-server kf2:9092 --topics-to-move-json-file topics-to-move.json --broker-list "1,2,3" --generate Current partition replica assignment {"version":1,"partitions":[{"topic":"mytest1","partition":0,"replicas":[3,4,1],"log_dirs":["any","any","any"]},{"topic":"mytest1","partition":1,"replicas":[4,1,2],"log_dirs":["any","any","any"]},{"topic":"mytest1","partition":2,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"mytest1","partition":3,"replicas":[2,3,4],"log_dirs":["any","any","any"]}]} Proposed partition reassignment configuration {"version":1,"partitions":[{"topic":"mytest1","partition":0,"replicas":[2,1,3],"log_dirs":["any","any","any"]},{"topic":"mytest1","partition":1,"replicas":[3,2,1],"log_dirs":["any","any","any"]},{"topic":"mytest1","partition":2,"replicas":[1,3,2],"log_dirs":["any","any","any"]},{"topic":"mytest1","partition":3,"replicas":[2,3,1],"log_dirs":["any","any","any"]}]} [root@kf1 sh]# [root@kf1 sh]# vim increase-replication-factor.json kafka.sh topics-to-move.json [root@kf1 sh]# vim increase-replication-factor.json [root@kf1 sh]# kafka-reassign-partitions.sh --bootstrap-server kf2:9092 --reassignment-json-file increase-replication-factor.json --execute Cannot execute because there is an existing partition assignment. Use --additional to override this and create a new partition assignment in addition to the existing one. The --additional flag can also be used to change the throttle by resubmitting the current reassignment. [root@kf1 sh]# kafka-reassign-partitions.sh --bootstrap-server kf2:9092 --reassignment-json-file increase-replication-factor.json --execute --additional Current partition replica assignment {"version":1,"partitions":[{"topic":"mytest1","partition":0,"replicas":[3,4,1],"log_dirs":["any","any","any"]},{"topic":"mytest1","partition":1,"replicas":[4,1,2],"log_dirs":["any","any","any"]},{"topic":"mytest1","partition":2,"replicas":[1,2,3],"log_dirs":["any","any","any"]},{"topic":"mytest1","partition":3,"replicas":[2,3,4],"log_dirs":["any","any","any"]}]} Save this to use as the --reassignment-json-file option during rollback Successfully started partition reassignments for mytest1-0,mytest1-1,mytest1-2,mytest1-3 [root@kf1 sh]# kafka-reassign-partitions.sh --bootstrap-server kf2:9092 --reassignment-json-file increase-replication-factor.json --verify Status of partition reassignment: Reassignment of partition mytest1-0 is completed. Reassignment of partition mytest1-1 is completed. Reassignment of partition mytest1-2 is completed. Reassignment of partition mytest1-3 is completed. [root@kf1 sh]# kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic mytest1 Topic: mytest1 TopicId: VKH2mpwpR4y3Mmv5sHurqw PartitionCount: 4 ReplicationFactor: 3 Configs: segment.bytes=1073741824 Topic: mytest1 Partition: 0 Leader: 3 Replicas: 2,1,3 Isr: 3,1,2 Topic: mytest1 Partition: 1 Leader: 1 Replicas: 3,2,1 Isr: 2,1,3 Topic: mytest1 Partition: 2 Leader: 2 Replicas: 1,3,2 Isr: 2,3,1 Topic: mytest1 Partition: 3 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 [root@kf1 sh]# cat topics-to-move.json { "topics": [ {"topic": "mytest1"} ], "version": 1 }
(4) KAFKA副本
作用:提高可靠性
默认副本一个,生产配置2个
leader选举:根据replicas顺序,确认leader
说明:分区中所有副本统称为AR
AR = ISR + OSR
ISR,表示和 Leader 保持同步的 Follower 集合。 如果 Follower 长时间未向 Leader 发送
通信请求或同步数据,则该 Follower 将被踢出 ISR。该时间阈值由 replica.lag.time.max.ms
参数设定,默认 30s。 Leader 发生故障之后,就会从 ISR 中选举新的 Leader。
OSR, 表示 Follower 与 Leader 副本同步时,延迟过多的副本。
(5)leader和follower故障处理细节
follower故障:
a) follower故障后,被剔除ISR 。 其他leader和follower继续接收数据
b) follower恢复后,follower会读取本地磁盘记录的的上次HW,并将log问卷高于HW的部分截取掉,从HW开始向elader进行同步
c) 等待follower的LEO大于等于该partition的HW,即follower追上leader之后,就可以重新加入ISR
注:LEO(log end offset):每个副本的最后一个offset,LEO其实就是最新的offset+1
HW(high watermark): 所有副本中最小的LEO
leader故障:
a) 从ISR中选出一个新的leader
b) 为保证多个副本之间的数据一致性,其余的follower会先将各自的log二五年间高于HW的部分截掉,然后从新的leader同步数据
问题:保证了数据一致性,不能保证数据不丢失或者不重复
(6)Leader Partiion负载平衡
原因:由于某些broker宕机,会导致Leader Partiion过于集中其他broker上,会导致一些broker读写压力过高,其他宕机过的读写请求很低,造成负载不均衡
参数 | 描述 |
auto.leader.rebalance.enable | 默认是 true。 自动 Leader Partition 平衡。 生产环境中, leader 重选举的代价比较大,可能会带来性能影响,建议设置为 false 关闭。 |
leader.imbalance.per.broker.percentage | 默认是 10%。 每个 broker 允许的不平衡的 leader的比率。如果每个 broker 超过了这个值,控制器会触发 leader 的平衡。 |
leader.imbalance.check.interval.seconds | 默认值 300 秒。检查 leader 负载是否平衡的间隔时间 |
(7)kafka文件存储机制
每个partition对应一个log文件,该log文件中存储的就是Producer生产的数据;每个partition对应于一个log文件, 该log文件中存储的就是Producer生产的数据。 Producer生产的数据会被不断追加到该log文件末端, 为防止log文件过大导致数据定位效率低下, Kafka采取了分片和索引机制,将每个partition分为多个segment。 每个segment包括: “.index”文件、 “.log”文件和.timeindex等文件。 这些文件位于一个文件夹下, 该文件夹的命名规则为: topic名称+分区序号, 例如: test-0。
说明:
一个partition分为多个segment
.log 日志文件
.index 偏移量索引文件
.timeindex 时间戳索引文件
查看log信息:
kafka-run-class.sh kafka.tools.DumpLogSegments --files test11-3/00000000000000000000.log
参数 |
说明 |
log.segment.bytes | Kafka 中 log 日志是分成一块块存储的,此配置是指 log 日志划分成块的大小, 默认值 1G。 |
log.index.interval.bytes | 默认 4kb, kafka 里面每当写入了 4kb 大小的日志(.log),然后就往 index 文件里面记录一个索引。 稀疏索引 |
(8)日志清理策略
log.retention.hours, 最低优先级小时,默认 7 天。
log.retention.minutes, 分钟。
log.retention.ms, 最高优先级毫秒。
log.retention.check.interval.ms, 负责设置检查周期,默认 5 分钟。
log.cleanup.policy = delete 所有数据启用删除策略
log.cleanup.policy = compact 所有数据启用压缩策略 (对于相同key的不同value值, 只保留最后一个版本
,使用特殊场合,用户和用户信息,保留用户最新的信息)
消息积压:
方法:
1 增大partion数量,
2 消费者加了并发,服务, 扩大消费线程
3 增加消费组服务数量
4 kafka单机升级成了集群
5 避免消费者消费消息时间过长,导致超时
6 使Kafka分区之间的数据均匀分布
可能情况:
1 如果是Kafka消费能力不足,则可以考虑增加 topic 的 partition 的个数,
同时提升消费者组的消费者数量,消费数 = 分区数 (二者缺一不可)
2 若是下游数据处理不及时,则提高每批次拉取的数量。批次拉取数量过少
(拉取数据/处理时间 < 生产速度),使处理的数据小于生产的数据,也会造成数据积压。
常用命令:
查看topic
kafka-topics.sh --bootstrap-server 11.0.1.143:9092 --list
查看消费组
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
查看消费组消费情况(可以查到消费组,topic,消费者,消费情况等信息)
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group console-consumer-26547
参考官网配置:https://kafka.apache.org/documentation/#producerconfigs