一、概述

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
View Code

 

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
View Code

 

 

三、使用

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 线程中创建了一个双端队列 RecordAccumulatormain 线程将消息发送给 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:生产者发送过来的数据,不需要等数据落盘应答。
1:生产者发送过来的数据, Leader 收到数据后应答。
-1(all):生产者发送过来的数据, Leader+和 isr 队列
里面的所有节点收齐数据后应答。 默认值是-1, -1 和all 是等价的。

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

}
View Code

 

 

 (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