生产环境-数据仓库组件之Kafka(二)《性能优化》

本文详细探讨了Kafka在生产环境中的性能优化,包括Heap Size调整、网络和IO线程配置、Socket Server参数优化、日志刷盘策略、保留策略、副本复制配置、分区数量设置以及副本策略等关键点,旨在提升Kafka的处理能力和稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生产环境-数据仓库组件之Kafka(二)《性能优化》

1、Heap Size的调整

vim kafka-server-start.sh
默认配置:
KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
调整为:
KAFKA_HEAP_OPTS="-Xmx4G -Xms4G"
推荐配置:一般HEAP SIZE的大小不超过主机内存的50%。

vim server.properties
(2-8都是在该文件配置)

2、网络和ios操作线程配置优化:

默认配置:
broker处理消息的最大线程数
num.network.threads=3
broker处理磁盘IO的线程数
num.io.threads=8
调整为:
broker处理消息的最大线程数
num.network.threads=9
broker处理磁盘IO的线程数
num.io.threads=16
推荐配置:
num.network.threads主要处理网络io,读写缓冲区数据,基本没有io等待,配置线程数量为cpu核数加1。
num.io.threads主要进行磁盘io操作,高峰期可能有些io等待,因此配置需要大些。配置线程数量为cpu核数2倍,最大不超过3倍。

3、socket server可接受数据大小(防止OOM异常):

默认配置:
socket.request.max.bytes=104857600
调整为:
socket.request.max.bytes=2147483600
推荐配置:
根据自己业务数据包的大小适当调大。这里取值是int类型的,而受限于java int类型的取值范围又不能太大:
java int的取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1,不能超出,超出之后报错:org.apache.kafka.common.config.ConfigException: Invalid value 8589934592 for configuration socket.request.max.bytes: Not a number of type INT。

4、log数据文件刷盘策略

使用默认配置
#每当producer写入10000条消息时,刷数据到磁盘
log.flush.interval.messages=10000
#每间隔1秒钟时间,刷数据到磁盘
log.flush.interval.ms=1000
推荐配置:
为了大幅度提高producer写入吞吐量,需要定期批量写文件。一般无需改动,如果topic的数据量较小可以考虑减少log.flush.interval.ms和log.flush.interval.messages来强制刷写数据,减少可能由于缓存数据未写盘带来的不一致。推荐配置分别message 10000,间隔1s。

5、日志保留策略配置

默认配置:
log.retention.hours=168
log.segment.bytes=1073741824
调整为:
#日志保留时长
log.retention.hours=72
#段文件配置
log.segment.bytes=1073741824
推荐配置:
日志建议保留三天,也可以更短;段文件配置1GB,有利于快速回收磁盘空间,重启kafka加载也会加快(kafka启动时是单线程扫描目录(log.dir)下所有数据文件)。如果文件过小,则文件数量比较多。

6、replica复制配置

使用默认值(配置文件中没有配置项,暂时没有改动,下面是建议值)
num.replica.fetchers=3
replica.fetch.min.bytes=1
replica.fetch.max.bytes=5242880
推荐配置:
每个follow从leader拉取消息进行同步数据,follow同步性能由这几个参数决定,分别为:
拉取线程数(num.replica.fetchers):fetcher配置多可以提高follower的I/O并发度,单位时间内leader持有更多请求,相应负载会增大,需要根据机器硬件资源做权衡,建议适当调大;
最小字节数(replica.fetch.min.bytes):一般无需更改,默认值即可;
最大字节数(replica.fetch.max.bytes):默认为1MB,这个值太小,推荐5M,根据业务情况调整
最大等待时间(replica.fetch.wait.max.ms):follow拉取频率,频率过高,leader会积压大量无效请求情况,无法进行数据同步,导致cpu飙升。配置时谨慎使用,建议默认值,无需配置。

7、分区数量配置

num.partitions=5
推荐配置:
默认partition数量1,如果topic在创建时没有指定partition数量,默认使用此值。Partition的数量选取也会直接影响到Kafka集群的吞吐性能,配置过小会影响消费性能,建议改为5。

8、副本策略:

默认配置:
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
调整为:
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3
推荐配置:
除了开发测试外,其他情况都建议将该值设置为大于1的值以保证高可用,比如:3。

vim producer.properties
(只修改了1-3)
1、指定元数据
bootstrap.servers=emr1:9092,emr2:9092,emr3:9092

2、压缩
compression.codec=snappy

3、消息的确认机制
request.required.acks=-1

4、序列化
serializer.class=kafka.serializer.DefaultEncoder

5、broker响应时间
request.timeout.ms=10000

6、producer还分为同步和异步模式
由属性producer.type指定,默认是sync,即同步发送模式。
.
.
.
.
.
下面是我的公众号,收集了现在主流的大数据技能和架构,欢迎大家一起来学习交流。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值