kafka参数配置参考和优化建议 —— 筑梦之路

对于Kafka的优化,可以从以下几个方面进行思考和优化:

  1. 硬件优化:使用高性能的硬件设备,包括高速磁盘、大内存和高性能网络设备,以提高Kafka集群的整体性能。

  2. 配置优化:调整Kafka的配置参数,包括消息存储、副本数、日志段大小、缓冲区大小等,以提高Kafka的吞吐量和稳定性。

  3. 网络优化:优化Kafka集群的网络设置,包括网络带宽、延迟和可靠性,以确保消息能够快速、可靠地传输。

  4. 分区优化:合理划分分区,避免分区过多或过少,以充分利用集群资源并提高消息的并发处理能力。

  5. 监控优化:建立完善的监控系统,及时发现和解决Kafka集群的性能瓶颈和故障,以保障Kafka的稳定运行。

  6. 客户端优化:优化生产者和消费者的配置和代码,以提高消息的生产和消费效率。

总的来说,Kafka的优化需要综合考虑硬件、配置、网络、分区、监控和客户端等多个方面,以达到提高性能和稳定性的目的。下面我将主要从Kafka使用参数设置来说明优化的主要思路,其基本核心思想就是提高Kafka的吞吐量和降低网络延迟。

 

生产者端(Producer)的参数

  • acks:默认值为1,表示指定分区中成功写入消息的副本数量。一般不需要修改。

  • max.request.size:默认值为1048576,即1M1。这个参数比较重要,表示生产端能够发送的最大消息大小。为了避免因消息过大导致发送失败,建议适当调大,比如调到10485760即10M。

  • retries:默认值为0,表示生产端消息发送失败时的重试次数。为了解决因瞬时故障导致的消息发送失败,比如网络抖动、leader换主,其中瞬时的leader重选举是比较常见的。因此这个参数的设置显得非常重要。建议设置为一个大于0的值,比如3或者更大值。

  • compression.type:默认值为none,表示生产端是否对消息进行压缩。一般不需要修改。

  • buffer.memory:默认值为33554432,即32M。表示生产端消息缓冲池或缓冲区的大小。一般不需要修改。

  • batch.size:默认值为16384,即16KB。发送到缓冲区中的消息会被分为一个一个的batch,分批次的发送到broker 端,这个参数就表示batch批次大小。可以根据实际情况或者压测情况来更改这个值,这个值太小,会导致频繁的网络请求,从而导致吞吐量下降,这个值太大会导致一条消息需要等待很长的时间才能发送出去,会增加网络的延迟。

  • linger.ms:默认值为0。用来控制batch最大的空闲时间,超过该时间的batch也会被发送到broker端。建议修改范围10~100之间,影响结果可以参考batch.size.

  • request.timeout.ms:默认值为30000,即30s。这个参数表示生产端发送请求后等待broker端响应的最长时间。一般不需要修改。

  • max.in.fight.requests.per.connection:默认值为5。这个参数非常重要,表示生产端与broker之间的每个连接最多缓存的请求数。一般不需要修改。

代理端(Broker)的参数

  • broker.id:默认值为0。每个broker都可以用一个唯一的非负整数id进行标识。你可以选择任意你喜欢的数字作为id,只要id是唯一的即可。

  • log.dirs:默认值为/tmp/kafka-logs。kafka存放数据的路径。这个路径并不是唯一的,可以是多个,路径之间只需要使用逗号分隔即可;每当创建新partition时,都会选择在包含最少partitions的路径下进行。

  • port:默认值为6667。server接收客户端连接的端口。根据实际网络环境和安全需求进行设置。

  • zookeeper.connect:默认值为null。ZooKeeper连接字符串的格式为:hostname:port。为了当某个host宕掉之后你能通过其他ZooKeeper节点进行连接,你可以按照以下方式制定多个hosts:hostname1:port1, hostname2:port2, hostname3:port33。

  • message.max.bytes:默认值为1000000。server可以接收的消息最大尺寸。重要的是,consumer和producer有关这个属性的设置必须同步,否则producer发布的消息对consumer来说太大。

  • num.network.threads:默认值为3。server用来处理网络请求的网络线程数目。一般你不需要更改这个属性。

  • num.io.threads:默认值为8。server用来处理请求的I/O线程的数目。这个线程数目至少要等于硬盘的个数。

  • background.threads:默认值为4。用于后台处理的线程数目,例如文件删除。你不需要更改这个属性。

  • queued.max.requests:默认值为500。在网络线程停止读取新请求之前,可以排队等待I/O线程处理的最大请求个数。根据实际业务需求进行设置。

  • fetch.min.bytes:表示Broker端积攒了多少数据就可以返回给consumer端

  • fetch.max.bytes: 默认值:50MB  消费者获取服务端一批数据最大的字节数, 这个参数主要受到下面两个参数的限制

message.max.bytes = broker配置 max.message.bytes = topic配置

消费者端(Consumer)的参数

  • fetch.min.bytes:默认值为1。消费者从服务器获取的最小数据量。如果设置为1,则消费者尽可能地从服务器获取数据;如果设置为1MB,则消费者会等待直到1MB的数据可用才从服务器获取。

  • fetch.max.wait.ms:默认值为500。消费者等待从服务器获取数据的最长时间。

  • max.partition.fetch.bytes:默认值为1048576,即1MB。消费者一次从服务器获取每个分区的最大字节数。

  • session.timeout.ms:默认值为30000,即30s。消费者在被认为死亡之前可以与服务器断开连接的时间。

  • auto.offset.reset:默认值为latest。消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该如何做。

原文链接:Kafka主要参数设置及优化建议 

作为搜集。

  • 18
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka 是一个分布式的消息系统,它的性能和稳定性非常重要。优化 Kafka 配置参数可以提高 Kafka 的吞吐量和稳定性。以下是一些常用的 Kafka 配置参数优化建议: 1. `num.network.threads` 和 `num.io.threads` 参数控制 Kafka 网络和 I/O 线程的数量。建议将 `num.network.threads` 设置为 CPU 核心数的两倍,将 `num.io.threads` 设置为 CPU 核心数的一半。 2. `socket.send.buffer.bytes` 和 `socket.receive.buffer.bytes` 参数控制 Kafka 网络套接字的发送和接收缓冲区大小。建议将它们设置为 64KB 或更高。 3. `socket.request.max.bytes` 参数控制 Kafka 网络套接字的最大请求大小。建议将它设置为足够大的值,以支持你的最大消息大小。 4. `log.retention.bytes` 和 `log.segment.bytes` 参数控制 Kafka 消息日志的段大小和保留大小。建议根据你的磁盘大小和消息吞吐量,设置合适的值。 5. `num.partitions` 参数控制 Kafka 主题的分区数。建议将它设置为主题并发消费者数量的倍数。 6. `queued.max.requests` 参数控制 Kafka 生产者发送消息的批处理大小。建议将它设置为 1 或更高,以达到最佳的吞吐量和延迟。 7. `unclean.leader.election.enable` 参数控制当 Kafka 集群中的一个节点失效时,是否允许使用未同步的副本替代它。建议将它设置为 false,以确保数据的一致性。 8. `min.insync.replicas` 参数控制 Kafka 消息的最小同步副本数。建议将它设置为大于等于 2,以确保数据的可靠性和一致性。 以上是一些常用的 Kafka 配置参数优化建议,不同的应用场景可能需要不同的配置建议根据实际情况进行调整和优化

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值