1、生产者producer

1.1 producer 参数acks设置

在消息被认为是“已提交”之前,producer需要leader确认的produce请求的应答数。该参数用于控制消息的持久性,目前提供了3个取值:

  • acks = 0: 表示produce请求立即返回,不需要等待leader的任何确认。这种方案有最高的吞吐率,但是不保证消息是否真的发送成功。
  • acks = -1: 表示分区leader必须等待消息被成功写入到所有的ISR副本(同步副本)中才认为produce请求成功。这种方案提供最高的消息持久性保证,但是理论上吞吐率也是最差的。
  • acks = 1: 表示leader副本必须应答此produce请求并写入消息到本地日志,之后produce请求被认为成功。如果此时leader副本应答请求之后挂掉了,消息会丢失。这个方案,提供了不错的持久性保证和吞吐。

配置推荐:

如果要较高的持久性要求以及无数据丢失的需求,设置acks = -1。其他情况下设置acks = 1。

1.2 producer参数 buffer.memory 设置(吞吐量)

该参数用于指定Producer端用于缓存消息的缓冲区大小,单位为字节,默认值为:33554432合计为32M。kafka采用的是异步发送的消息架构,prducer启动时会首先创建一块内存缓冲区用于保存待发送的消息,然后由一个专属线程负责从缓冲区读取消息进行真正的发送。

  • 消息持续发送过程中,当缓冲区被填满后,producer立即进入阻塞状态直到空闲内存被释放出来,这段时间不能超过max.blocks.ms设置的值,一旦超过,producer则会抛出TimeoutException 异常,因为Producer是线程安全的,若一直报TimeoutException,需要考虑调高buffer.memory 了。
  • 用户在使用多个线程共享kafka producer时,很容易把 buffer.memory 打满。

1.3 producer参数 compression.type 设置

producer压缩器,目前支持none(不压缩),gzip,snappy和lz4。

2016年8月,FaceBook开源了Ztandard。官网测试: Ztandard压缩率为2.8,snappy为2.091,LZ4 为2.101

1.4 producer参数 retries设置

producer重试的次数设置。重试时producer会重新发送之前由于瞬时原因出现失败的消息。瞬时失败的原因可能包括:元数据信息失效、副本数量不足、超时、位移越界或未知分区等。倘若设置了retries > 0,那么这些情况下producer会尝试重试。

1.5 producer参数batch.size设置

producer都是按照batch进行发送的,因此batch大小的选择对于producer性能至关重要。producer会把发往同一分区的多条消息封装进一个batch中,当batch满了后,producer才会把消息发送出去。但是也不一定等到满了,这和另外一个参数linger.ms有关。默认值为16K,合计为16384.

1.6 producer参数linger.ms设置

producer是按照batch进行发送的,但是还要看linger.ms的值,默认是0,表示不做停留。这种情况下,可能有的batch中没有包含足够多的produce请求就被发送出去了,造成了大量的小batch,给网络IO带来的极大的压力。

配置推荐:

为了减少了网络IO,提升了整体的TPS。假设设置linger.ms=5,表示producer请求可能会延时5ms才会被发送。

1.7 producer参数max.in.flight.requests.per.connection设置

producer的IO线程在单个Socket连接上能够发送未应答produce请求的最大数量。增加此值应该可以增加IO线程的吞吐量,从而整体上提升producer的性能。不过就像之前说的如果开启了重试机制,那么设置该参数大于1的话有可能造成消息的乱序。

配置推荐:

  • 默认值5是一个比较好的起始点,如果发现producer的瓶颈在IO线程,同时各个broker端负载不高,那么可以尝试适当增加该值.
  • 过大增加该参数会造成producer的整体内存负担,同时还可能造成不必要的锁竞争反而会降低TPS

来源于:https://juejin.im/post/5bd51b32e51d457947024771

2、消费者consumer

kafka(四)生产者和消费者配置优化相关推荐

  1. kafka中生产者和消费者的分区问题

    本文来书说下kafka中生产者和消费者的分区问题 文章目录 概述 主题的分区数设置 分区与生产者 分区与消费者 range roundrobin(轮询) 本文参考 本文小结 概述 我们知道,生产者发送 ...

  2. 从现在开始学 Kafka:SpringBoot 集成 Kafka,生产者与消费者示例

    从现在开始学 Kafka:SpringBoot 集成 Kafka,生产者与消费者示例 前言 加依赖 生产者 加配置 生产者代码示例 消费者 加配置 消费者监听器示例 调用 关于 Serializer ...

  3. 详细讲解如何使用Java连接Kafka构建生产者和消费者(带测试样例)

    1 缘起 学习消息队列的过程中,先补习了RabbitMQ相关知识, 接着又重温了Kafka相关的知识, 发现,我并没有积累Java原生操作Kafka的文章, 只使用SpringBoot集成过Kafka ...

  4. 网络爬虫:分离生产者和消费者来优化爬虫程序

    问题描述: 基于前面的一些工作(可点击这里参见笔者前面的相关博客),我们取得了一些成果.不过存在的问题又总是会让人坐立不安.本文通过分离生产者.消费者以及引入连接池技术来优化爬虫程序.解决前面说到的数 ...

  5. springboot整合rocketmq,支持多连接生产者和消费者配置。不同topic适配不同业务处理类

    1.代码仓库 rocketmq版本4.5.2 直接上代码,下面再逐步讲解,仓库地址 本地启动后,访问swagger地址测试,http://127.0.0.1:8099/mq/swagger-ui/in ...

  6. Kafka 生产者、消费者命令行操作

    Kafka 生产者.消费者命令行操作 1.查看操作生产者命令参数 bin/kafka-console-producer.sh 参数 --bootstrap-server <String: ser ...

  7. 12.多线程的实现方式、线程安全问题的产生与解决以及生产者与消费者问题

    一.实现多线程 1.1 了解多线程 多线程是指从软件或者硬件上实现多个线程并发执行的技术,具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,从而提升性能. 1.2 并发与并行 并行是指同 ...

  8. linux使用线程实现生产者消费者问题,Linux下生产者与消费者的线程实现

    代码见<现代操作系统> 第3版. 为了显示效果,添加了printf()函数来显示运行效果 #include #include #define MAX 20 pthread_mutex_t ...

  9. 笔记-13-多线程 Thread方法 线程安全 生产者和消费者 死锁和阻塞

    1.实现多线程 1.1简单了解多线程[理解] 是指从软件或者硬件上实现多个线程并发执行的技术. 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能. 1.2并发和并行[理解] 并 ...

最新文章

  1. 这有5种来自大自然「馈赠」的AI技术及其应用,你知道多少?
  2. 又一次内存分配失败(关于overcommit_memory)
  3. LOL手游最能混分的英雄,前期刷野靠队友,迪丽阿巴亲自教学
  4. stringbuffer_StringBuffer的存在的含义
  5. 用python怎么下载_如何使用python下载视频
  6. js xmlhttp ajax 超时时间,如何为XMLHttpRequest设置超时和ontimeout?
  7. 智能实验室-全能优化(Guardio) 4.6.0.760
  8. Markdown自定义CSS样式
  9. 【AP_EJOR】Robust solutions to multi-objective linear programs with uncertain data(2)
  10. 基于Chrome内核(WebKit.net)定制开发DoNet浏览器
  11. 苹果笔记本访问服务器共享文件夹,mac查看win7共享文件怎么操作_mac如何访问win7共享文件夹-win7之家...
  12. Word 用宏命令实现锁定页眉页脚的两种方式
  13. JS console.log()的理解
  14. 5.Fabric v2.0 java-sdk 根据TXID查询区块并从区块解析数据
  15. MyEclipse2019 4破解
  16. ArrayList集合类实现的RandomAccess空接口有何用?
  17. css设置宽度与高度比例,实现高度为宽度的百分之多少
  18. 成都的IT研发产业和芯片产业等情况:2006年初的数据。(转)
  19. Excel-VBA 快速上手(八、单元格对象-常见的单元格操作)
  20. 融云携新版实时音视频亮相 LiveVideoStack 2019

热门文章

  1. python中的递归函数是什么_Python中的递归函数是什么
  2. 2021级C语言大作业 - 消灭星星
  3. 《Python游戏趣味编程》 第3章 美丽的圆圈画
  4. 腾讯开源业界首个云原生标准的一站式微服务管理框架Femas
  5. 火出天际的“元宇宙”究竟是什么?
  6. 软硬一体打天下,英特尔在 AI 上做了些什么?
  7. 全面提升AI语言理解能力,达摩院自研语言模型体系登顶6大权威榜单
  8. B 站 Up 主自制秃头生成器,圆你秃头梦想可好?
  9. 罗永浩回应被“Sharklet 科技解约”;12306 已屏蔽多个抢票软件;FreeDB 将关闭 | 极客头条...
  10. 女朋友:你能给我讲讲单例模式吗?