图解Kafka Producer常用性能优化配置参数

这篇具有很好参考价值的文章主要介绍了图解Kafka Producer常用性能优化配置参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 基本参数

  • bootstrap.servers:Kafka broker服务器地址列表,,分开,可不必写全,Kafka内部有自动感知Kafka broker的机制

  • client.dns.lookup:客户端寻找bootstrap地址的方式,支持两种方式:

    • resolve_canonical_bootstrap_servers_only:依据bootstrap.servers提供的主机名(hostname),根据主机上的名称服务返回其IP地址的数组(InetAddress.getAllByName),然后依次获取inetAddress.getCanonicalHostName(),再建立tcp连接。一个主机可配置多个网卡,如果启用该功能,应该可以有效利用多网卡的优势,降低Broker的网络端负载压力。
    • use_all_dns_ips:直接使用bootstrap.servers中提供的hostname、port创建tcp连接,默认选项。
  • compression.type:消息压缩算法,可选值:none、gzip、snappy、lz4、zstd,默认不压缩,建议与Kafka服务器配置的一样,当然Kafka服务端可配置的压缩类型为 producer,即采用与发送方配置的压缩类型。发送方与Broker 服务器采用相同的压缩类型,可有效避免在Broker服务端进行消息的压缩与解压缩,大大降低Broker的CPU使用压力。

  • client.id:客户端ID,如果不设置默认为producer-递增,强烈建议设置该值,尽量包含ip,port,pid

  • send.buffer.bytes:网络通道(TCP)的发送缓存区大小,默认128K

  • receive.buffer.bytes:网络通道(TCP)的接收缓存区大小,默认32K

  • reconnect.backoff.ms:重新建立链接的等待时长,默认50ms,属于底层网络参数,基本不关注

  • reconnect.backoff.max.ms:重建链接的最大等待时长,默认1s,连续两次对同一个连接建立重连,等待时间会在reconnect.backoff.ms的初始值上成指数级递增,但超过max后,将不再指数级递增

  • key.serializer:消息key的序列化策略,org.apache.kafka.common.serialization接口实现类,注意别导错包了

  • value.serializer:消息体序列化策略

  • partitioner.class:消息发送队列负载算法,默认 DefaultPartitioner,路由算法如下:

    • 如指定 key ,则使用 key 的 hashcode 与分区数取模
    • 如未指定 key,则轮询所有分区
  • interceptor.classes:拦截器列表,kafka运行在消息真正发送到broker之前对消息进行拦截加工

  • enable.idempotence:是否开启发送端的幂等,默认false

  • transaction.timeout.ms:事务协调器等待客户端的事务状态反馈的最大超时时间,默认60s

  • transactional.id:事务id,用于在一个事务中唯一标识一个客户端

2 性能优化常配参数

涉及到消息发送是如何工作的,本节首先将罗列参数,做简单说明,然后再给出运作图,进一步阐述其工作机制。

  • buffer.memory
    用于设置一个生产者(KafkaProducer)中缓存池的内存大小,默认为32M。
  • max.block.ms
    当消息发送者申请空闲内存时,如果可用内存不足的等待时长,默认为60s,如果在指定时间内未申请到内存,消息发送端会直接报TimeoutException,这个时间包含了发送端用于查找元信息的时间
  • retries
    重试次数,Kafka Sender线程从缓存区尝试发送到Broker端的重试次数,默认为Integer.MAX_VALUE,为了避免无限重试,只针对可恢复的异常,例如Leader选举中这种异常就是可恢复的,重试最终是能解决问题的。
  • acks
    用来定义消息“已提交”的条件(标准),就是 Broker 端向客户端承偌已提交的条件,可选值如下:
  • 0
    表示生产者不关心该条消息在 broker 端的处理结果,只要调用 KafkaProducer 的 send 方法返回后即认为成功,显然这种方式是最不安全的,因为 Broker 端可能压根都没有收到该条消息或存储失败。
  • all 或 -1
    表示消息不仅需要 Leader 节点已存储该消息,并且要求其副本(准确的来说是 ISR 中的节点)全部存储才认为已提交,才向客户端返回提交成功。这是最严格的持久化保障,当然性能也最低。
  • 1
    表示消息只需要写入 Leader 节点后就可以向客户端返回提交成功。
  • batch.size
    在消息发送端Kafka引入了批的概念,发送到服务端的消息通常不是一条一条发送,而是一批一批发送,该值用于设置每一个批次的内存大小,一个批次对应源码层级为ProducerBatch对象,默认为16K。
  • linger.ms
    该参数与batch.size配合使用。Kafka希望一个批次一个批次去发送到Broker,应用程序往KafkaProducer中发送一条消息,首先会进入到内部缓冲区,具体是会进入到某一个批次中(ProducerBatch),等待该批次堆满后一次发送到Broker,这样能提高消息的吞吐量,但其消息发送的延迟也会相应提高,试想一下,如果在某一个时间端,应用端发送到broker的消息太少,不足以填满一个批次,那岂不是消息一直无法发送到Broker端吗?
    为了解决该问题,linger.ms参数应运而生。它的作用是控制在缓存区中未积满时来控制消息发送线程的行为。如果linger.ms 设置为 0表示立即发送,如果设置为大于0,则消息发送线程会等待这个值后才会向broker发送。有点类似于 TCP 领域的 Nagle 算法
  • delivery.timeout.ms
    消息在客户端缓存中的过期时间,在Kafka的消息发送模型中,消息先进入到消息发送端的双端缓存队列中,然后单独一个线程将缓存区中的消息发送到Broker,该参数控制在双端队列中的过期时间,默认为120s,从进入双端队列开始计时,超过该值后会返回超时异常(TimeoutException)。
  • request.timeout.ms
    请求的超时时间,主要是Kafka消息发送线程(Sender)与Broker端的网络通讯的请求超时时间
  • max.request.size
    Send线程一次发送的最大字节数量,也就是Send线程向服务端一次消息发送请求的最大传输数据,默认为1M。
  • max.in.flight.requests.per.connection
    设置每一个客户端与服务端连接,在应用层一个通道的积压消息数量,默认为5,有点类似Netty用高低水位线控制发送缓冲区中积压的多少,避免内存溢出。

3 图解核心数据结构

图解Kafka Producer常用性能优化配置参数

4 图解参数的作用时机

图解Kafka Producer常用性能优化配置参数

到底如何指导实际业务的性能优化参数,该调哪些参数?咱们下篇文章再叙。

文章转载自公众号:JavaEdge

参考:

编程严选网

本文由博客一文多发平台 OpenWrite 发布!文章来源地址https://www.toymoban.com/news/detail-772328.html

到了这里,关于图解Kafka Producer常用性能优化配置参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    对于Kafka的优化,可以从以下几个方面进行思考和优化: 硬件优化 :使用高性能的硬件设备,包括高速磁盘、大内存和高性能网络设备,以提高Kafka集群的整体性能。 配置优化 :调整Kafka的配置参数,包括消息存储、副本数、日志段大小、缓冲区大小等,以提高Kafka的吞吐量

    2024年01月22日
    浏览(26)
  • 图解Kafka高性能之谜(五)

            简单架构设计: 详细架构设计:          索引文件定位使用跳表的设计         偏移量定位消息时使用稀疏索引: kafka采用 sendFile ()的零拷贝方式,磁盘DMA到内存,然后一次cpu copy到socket缓存,一次DMA到网卡完成数据发送。 如下图,6条消息采用key可能分三次

    2024年02月08日
    浏览(36)
  • kafka中幂等性producer和事务性producer

    在Kafka中,“幂等性生产者”的概念是指一种特性,它确保消息在生产者的发送操作被重试时仅发送一次。幂等性是一种重要的特性,因为在分布式系统中,网络问题或其他故障可能导致生产者发送的消息在传输过程中失败,从而需要重新发送。如果生产者没有幂等性保证,

    2024年02月14日
    浏览(31)
  • Kafka3.0.0版本——消费者(消费者组详细消费流程图解及消费者重要参数)

    创建一个消费者网络连接客户端,主要用于与kafka集群进行交互,如下图所示: 调用sendFetches发送消费请求,如下图所示: (1)、Fetch.min.bytes每批次最小抓取大小,默认1字节 (2)、fetch.max.wait.ms一批数据最小值未达到的超时时间,默认500ms (3)、Fetch.max.bytes每批次最大抓取大小,默

    2024年02月09日
    浏览(34)
  • Kafka性能优化

    目录 Kafka可视化管理工具kafka-manager 线上环境规划 JVM参数设置  线上问题及优化 如果消息丢失 消息重复消费 消息乱序 消息积压 延时队列 消息回溯 分区数越多吞吐量越高吗 消息传递保障  kafka的事务 kafka高性能的原因 数据传输零拷贝原理: 安装及基本使用可参考 :http

    2024年02月07日
    浏览(20)
  • Failed to construct kafka producer at org.apache.kafka.clients.producer.KafkaProducer

    报错信息如下: 在网上找了很久的解决方案,也没找到个所以然,可能是我能力不足没理解到,后来我尝试clean下项目,竟然报错了 提示我pom.xml中有错误,我看了看,唯一有可能的是新导入的一个依赖去掉了版本号,我加上版本号后又重新clean下,成功了,, 然后,我重启

    2024年02月05日
    浏览(32)
  • Kafka常用参数

    kafka broker、consumer、和producer都有很多可配置的参数。本文主要总结日常开发中常用到的参数。其中producer端可以在 org.apache.kafka.clients.producer.ProducerConfig 中找到配置项,consumer端可以在 org.apache.kafka.clients.consumer.ConsumerConfig 中找到各配置项。 $KAFKA_HOME/config/server.properties文件中的

    2024年02月09日
    浏览(22)
  • Kafka高性能集群部署与优化

    Kafka 是由Apache Software Foundation开发的一个分布式流处理平台,源代码以Scala编写。Kafka最初是由LinkedIn公司开发的,于2011年成为Apache的顶级项目之一。它是一种高吞吐量、可扩展的发布订阅消息系统,具有以下特点: 高吞吐量:Kafka每秒可以处理数百万条消息。 持久化:数据存

    2024年02月13日
    浏览(48)
  • Kafka之Producer网络传输

    在Kafka的组成部分(Broker、Consumer、Producer)中,设计理念迥异,每个部分都有自己独特的思考。而把这些部分有机地组织起来,使其成为一个整体的便是「网络传输」。区别于其他消息队列的方式( RocketMQ处理网络部分直接使用成熟的组件Netty ),Kafka则是直接对java的NIO进行

    2024年03月23日
    浏览(31)
  • Kafka_02_Producer详解

    Producer (生产者): 生产并发送消息到Broker(推送) Producer是 多线程安全 的(建议通过池化以提高性能) Producer实例后可发送多条消息(可对应多个ProducerRecord) // 0.9之后的版本是基于Java实现(之前是Scala实现) Producer客户端发送消息大致逻辑: 配置Producer客户端参数并创建该Producer实例 构

    2024年02月01日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包