kafka相关参数调优

1. 消息大小限制调整

message.max.bytes (broker配置)
max.message.bytes (topic配置)

可以在创建topic的时候增加这个配置:

> bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic my-topic --partitions 1 \
--replication-factor 1 --config max.message.bytes=64000

或者在现有的topic添加自定义配置:

> bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name my-topic
--alter --add-config max.message.bytes=128000

还有我们要确保replica.fetch.max.bytes比以上两个值都大,要不然生成大的消息的时候还是会报错。

参考博客

https://*.com/questions/65631999/why-is-replica-fetch-bytes-greater-than-max-message-bytes-allowed

2,Replica副本相关:

num.replica.fetchers=1

用于从broker复制消息的 fetcher 线程数。 增加这个值可以增加follower broker中的I/O并行度。

replica.fetch.max.bytes=1048576

尝试为每个分区获取的消息字节数。 这不是一个绝对最大值,如果 fetch 的第一个非空分区中的第一个记录批大于此值,仍将返回记录批以确保可以进行进度。 broker接受的最大记录批量大小通过 message.max.bytes(broker配置)或 max.message.bytes(topic配置)定义。

replica.fetch.wait.max.ms=500

跟随者副本发出的每个 fetcher 请求的最大等待时间。 此值应始终小于 replica.lag.time.max.ms 以防止 ISR 频繁收缩低吞吐量主题

replica.high.watermark.checkpoint.interval.ms=5000

将副本保存到磁盘的频率

replica.socket.timeout.ms=30000

网络请求的套接字超时。 它的值至少应该是 replica.fetch.wait.max.ms

replica.socket.receive.buffer.bytes=65536

网络请求的套接字接收缓冲区

controller.socket.timeout.ms=30000

控制器到broker的套接字超时

num.recovery.threads.per.data.dir=4

每个数据目录的线程数,用于在启动时恢复日志并在关闭时刷新。
*partition数量多的话非常建议调大此值,建议4以上

replica.socket.receive.buffer.bytes=4096000

网络请求的套接字接收缓冲区

3.Zookeeper相关

zookeeper.connection.timeout.ms=6000

客户端等待与 Zookeeper 建立连接的最长时间。 如果未设置,则使用 zookeeper.session.timeout.ms 中的值

zookeeper.sync.time.ms=2000

ZK 追随者可以落后于 ZK 领导者多远

4.套接字服务相关配置

num.io.threads=5

服务器用于处理请求的线程数,可能包括磁盘 I/O

num.network.threads=8

服务器用于接收来自网络的请求并向网络发送响应的线程数

socket.request.max.bytes=104857600

套接字请求中的最大字节数

socket.receive.buffer.bytes=1048576

网络请求的套接字接收缓冲区

socket.send.buffer.bytes=1048576

网络请求的套接字发送缓冲区

queued.max.requests=500

在阻塞网络线程之前,数据平面允许的排队请求数

5.Producer常用参数:

linger.ms=50
生产者将在请求传输之间到达的任何记录组合成一个批处理请求
batch.size=524288
每当多个记录被发送到同一个分区时,生产者将尝试将记录一起批处理成更少的请求。
compression.type=lz4
指定给定topic的最终压缩类型。 此配置接受标准压缩编解码器('gzip'、'snappy'、'lz4'、'zstd')。 它还接受相当于不压缩的“未压缩”; 和“生产者”,这意味着保留生产者设置的原始压缩编解码器。
acks=1
生产者要求领导者在考虑完成请求之前收到的确认数量。这控制了发送的记录的持久性
max.request.size=5242880
请求的最大大小(以字节为单位)。
buffer.memory=268435456
生产者可用于缓冲等待发送到服务器的记录的内存总字节数。
max.in.flight.requests.per.connection
客户端在阻塞之前将在单个连接上发送的未确认请求的最大数量。

6.Consumer常用参数:

bootstrap.servers
Kafka群集信息列表,用于连接kafka集群,如果集群中机器数很多,只需要指定部分的机器主机的信息即可,不管指定多少台
group. id
标识一个consumer组的名称
key.deserializer
消息key反序列化器
value.deserializer
消息value反序列化器
session .timeout.ms
消费者和群组协调器的最大心跳时间,如果超过该时间则认为该消费者已经死亡或者故障,需要提出消费者组
max.poll.interval .ms
一次poll间隔最大时间
auto.offset.reset
当消费者读取偏移量无效的情况下,需要重置消费起始位置,默认为latest(从消费者启动后生成的记录),另外一个选项值是 earliest,将从有效的最小位移位置开始消费
enable.auto.commit
consumer提交方式设置
fetch.max.bytes
consumer端一次拉取数据的最大字节数
max.poll.records
consumer端一次拉取数据的最大条数
connections.max.idle .ms
consumer默认和kafka broker建立长连接,当连接空闲时间超过该参数设置的值,那么将连接断开,当使用时,在进行重新连接

7. Linux系统TCP层面的调优建议

可以参考

https://docs.cloudera.com/documentation/enterprise/latest/topics/kafka_system_level_broker_tuning.html#networking_parameters
https://docs.cloudera.com/documentation/other/reference-architecture/PDF/cloudera_ref_arch_metal.pdf

上一篇:Open3D 体素下采样


下一篇:weblogic.xml在项目中设置的注意点