kafka ---- producer与broker配置详解以及ack机制详解

一、producer 配置

1、bootstrap.servers

kafka broker集群的ip列表,格式为:host1:port1,host2:port2,…

2、client.id

用于追踪消息的源头

3、retries

当发送失败时客户端会进行重试,重试的次数由retries指定,默认值是2147483647,即 Integer.MAX_VALUE;在重试次数耗尽和delivery.timeout.ms超时时间结束,如果还没发送成功,则会返回失败;一般不会使用此值去控制重试次数,而是使用delivery.timeout.ms这个值去控制;

4、delivery.timeout.ms

发送消息的最长总耗时,即,从 send 方法返回后,到触发 Callback 的总耗时。其包含了,producer内部攒批的时间;向 broker 发送请求并等待返回的时间;多次重试的时间;这个值应该大于等于request.timeout.ms 和 linger.ms的总和

5、 request.timeout.ms

producer发送一次请求等待响应的最大超时时间,如果在超时时间过后未收到响应,则客户端将重新发送请求,如果重试次数用尽,则请求失败。

6、enable.idempotence

设置为“true”时,生产者将确保在流中只写入每条消息的一个副本。如果为 ‘false’,则由于代理故障等原因,又可能会写入多个副本。要开启enable.idempotence,则必须要求如下配置也需要满足

max.in.flight.requests.per.connection <=5(用于确保消息的顺序性)
retries>0
acks=all

默认情况下enable.idempotence是开启的,如果上述配置存在冲突,并且enable.idempotence并没有显式的开启,则enable.idempotence会被disable;如果存在冲突,并且enable.idempotence显式开启,则会抛出ConfigException 异常

7、max.in.flight.requests.per.connection

在该链接被阻塞之前,所能允许的未收到ack响应的请求的最大数量,
如果 max.in.flight.requests.per.connection>1;enable.idempotence=false;retries>=1;将会存在日志无序发送的风险由于重新发送(retries);
如果retries=0或者enable.idempotence=true,则将不存在无序风险。

8、acks

这个指标用于控制发送的记录的持久性,参数详解如下:

  • acks=0 如果被设置为0,则生产者并不会等待任何服务器的确认就会认为该发送是成功的,并不会保证该消息被发送到了服务器并被写到内存中,并且在此配置下,retries的配置将不会生效
  • acks=1 如果被设置成1,则只要leader所在的节点返回了确认,就会认为该发送是成功的,leader并不会等待其他follower的成功确认就会返回成功
  • acks=all 同acks=-1,消息从生产者发送到了leader,leader会等待所有in-sync replicas(ISR列表中的所有成员)返回确认,该leader才会向生产者发送ack确认
    有效值有:[all, -1, 0, 1]

9、buffer.memory

生产者配置缓存的大小,当需要发送消息的时候,会从buffer.memory中分配一个batch.size大小的batch用来攒批次,当数据量达到batch.size大小或者时间达到linger.ms就会被发送,如果消息发送过快,导致buffer.memory被用完,将会堵塞当前线程,堵塞的最大时间是buffer.memory,当超过这个时间,将会抛出异常

10、batch.size

为降低发送的频率,producer会将发送到同一分区的多个记录攒成一个批次来进行批量发送;并且KafkaProducer有一个Sender线程会把多个Batch打包成一个Request发送到Kafka服务器上去。batch.size用来设置该Batch的大小。该值太小会降低吞吐量((批大小为零将完全禁用批处理)),该值太大会造成内存的浪费。但是当数据量较少的时候,很长一段时间无法达到batch.size该怎么办呢,我们使用linger.ms来控制该Batch等待的时间,当该时间达到,即使大小没有达到batch.size也会发送,linger.ms设置为0,代表立即发送。

11、client.dns.lookup

三、broker配置

1、min.insync.replicas

当一个producer的acks被设置成了all或者-1,min.insync.replicas参数设置了一个最小的副本数,确认消息写入成功的副本必须达到该值,该发送才会被确认成功,如果最小值不能被满足,则producer将会抛出异常,如果你的副本数为3,则可以设置该值为2,这将确保必须大多数的副本都成功确认了该消息才会被认为是成功的。

2、replica.lag.time.max.ms

如果在此时间内,follower并没有去发送fetch请求到leader也并没有消耗到leader日志端偏移量,该leader将会从ISR列表中将该follower移除,等到该副本追上了Leader副本的进度,该副本会被再次加入到ISR列表中。该值默认值30000 (30 seconds)

四、ack机制详解

acks=0和acks=1暂且先不讲,着重讲一下acks=all的情况,在复制因子为3的前提下:

1、case 1

当min.insync.replicas=2且acks=all时,如果此时ISR列表只有[1,2],3被踢出ISR列表,只需要保证两个副本同步了,生产者就会收到成功响应。即当前情况仍能对外提供服务。

2、case 2

当min.insync.replicas=2,如果此时ISR列表只有[1],2和3被踢出ISR列表,那么当acks=all时,则不能成功写入数;当acks=0或者acks=1可以成功写入数据。

3、case 3

这种情况是很容易引起误解的,如果acks=all且min.insync.replicas=2,此时ISR列表为[1,2,3],那么还是会等到所有的同步副本都同步了消息,才会向生产者发送成功响应的ack.因为min.insync.replicas=2只是一个最低限制,即同步副本少于该配置值,则会抛异常,而acks=all,是需要保证所有的ISR列表的副本都同步了才可以发送成功响应。

引用

https://www.jianshu.com/p/3eb29d653607

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

检测和处理异常值的方法

异常值检测 不同的方法适用于不同类型的数据和场景。选择合适的异常值检测方法应考虑以下因素&#xff1a; 数据类型&#xff08;连续型、离散型、分类型等&#xff09;。数据分布特征&#xff08;正态分布、非正态分布、多维数据等&#xff09;。数据规模和维度&#xff08;…

力扣刷题(3)

整数反转 整数反转-力扣 思路&#xff1a; 利用%和/不断循环取待反转整数的最后一位&#xff0c;注意判断是否超出范围。 int reverse(int x){int y0;while(x){if(y > INT_MAX/10 || y < INT_MIN/10)return 0;int tmpx%10;yy*10tmp;x/10;}return y; }字符串转换整数 …

自动化代码报错:ElementClickInterceptedException 解决方案

在自动化测试中&#xff0c;如果有多个弹窗出现&#xff0c;代码执行可能会遇到ElementClickInterceptedException的错误&#xff0c;表明元素点击被拦截&#xff1a; 一般由于以下原因&#xff1a; 一、页面加载未完成 在页面尚未完全加载完成时尝试点击某个元素&#xff0c…

ENVI SARscape||笔记

介绍就不介绍了&#xff0c;直入主题&#xff01; 第一章 ENVI和SARscape 下载与安装&#xff1a; ENVI 5.6 软件安装包下载及安装激活教程&#xff01; (qq.com)https://mp.weixin.qq.com/s/kH0g5g9AALgDNPssfdZ8wQ 启动 ENVI 的启动模式有两种&#xff1a;ENVI和ENVIIDL&…

前端性能优化:提升网站加载速度的五个关键技巧

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端性能优化&#xff1a;提升网站加载速度的五个关键技巧1. 引言2. 前端性能优化的五个关键技巧2.1 减少HTTP请求技巧说明实现示例 2.2 启用浏览器缓存技巧说明实现示例 2.3 使用内容分发网络&#xff08;CDN&#xff09;技巧说明…

spring项目数据校验

在 Spring 项目中&#xff0c;数据校验是确保输入数据的完整性、有效性和一致性的重要环节。Spring 提供了多种方式来进行数据校验&#xff0c;包括使用注解、定义自定义校验器以及结合异常处理来统一管理校验错误。以下是如何在 Spring 项目中进行数据校验的详细介绍&#xff…

Java高级Day34-流补充

97.对象处理流 对象流-ObjectInputStream和ObjectOutputStream 具体说明&#xff1a; 以前 int n 100; 是在文件内保存了100&#xff0c;但现在的需求是要在文件内保存 int 100 即保存值和数据类型 这样的保存叫做 -> 序列化&#xff0c;把其重新恢复就叫 -> 反序列…

【MYSQL索引】1 索引基础数据准备部分

创建索引 在已经存在的表中创建索引可以使用ALTER TABLE语句或者CREATE INDEX语句。 使用ALTER TABLE语句创建索引 ALTER TABLE语句创建索引的基本语法如下&#xff1a; ALTER TABLE table_name ADD [UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name[le…

建设工程经济之工程经济(三)

技术方案不确定性分析 盈亏平衡分析是通过计算技术方案达产年盈亏平衡点&#xff08;BEP&#xff09;&#xff0c;分析技术方案成本与收入的平衡关系&#xff0c;判断技术方案对不确定性因素导致产销量变化的适应能力和抗风险能力。盈亏平衡点&#xff08;BEP&#xff09;的表…

Adobe DC 2022提示无法识别的错误 - 解决方案

Adobe DC 2022提示无法识别的错误 - 解决方案 问题解决方案更改安装&#xff08;推荐&#xff09;重新安装&#xff08;推荐&#xff09;降级安装&#xff08;不推荐&#xff09; 问题 使用Adobe DC 2022合并图片创建PDF时&#xff0c;会提示无法识别的错误&#xff0c;这是因…

Mac 安装Hadoop教程

1. 引言 本教程旨在介绍在Mac 电脑上安装Hadoop&#xff0c;便于编程开发人员对大数据技术的熟悉和掌握。 2.前提条件 2.1 安装JDK 想要在你的Mac电脑上安装Hadoop&#xff0c;你必须首先安装JDK。具体安装步骤这里就不详细描述了。你可参考Mac 下载JDK8。 2.2 配置ssh环境…

2024如何开始进入美业?美业创业步骤分享|博弈美业系统管理系统源码

进入美业可以是一个令人兴奋且具有挑战性的决定。以下是一些步骤&#xff0c;希望可以帮助你在美业建立自己的职业生涯&#xff1a; 1.确定你的兴趣和专长&#xff1a; 首先要考虑你对美业的兴趣和擅长的领域&#xff0c;比如化妆、美发、美甲、美容护理等。确定自己的兴趣和优…

【Go语言成长之路】多模块工作区入门

文章目录 【Go语言成长之路】多模块工作区入门前提条件一、创建一个模块二、创建工作空间三、创建第二个模块四、更多关于workspace 【Go语言成长之路】多模块工作区入门 ​ 多模块工作区(muti-module workspaces)可以使得开发者在多个模块中构建并且运行代码&#xff0c;相互…

C++:Github开源7.8Kstar的线程池介绍

目录 源码展示 1. 头文件和依赖 1. 2. 3. 4. 5. 和 6. 7. 8. 2. ThreadPool 类的定义 1. std::vector workers; 2. std::queue> tasks; 3. std::mutex queue_mutex; 4. std::condition_variable condition; 5. bool stop; 3. 构造函数 1. 初始化 …

另一种关于类的小例

前言 我们还是以一段关于构造函数的代码作为开端&#xff0c;我们以之前银行家的小项目为背景 class Account {constructor(owner, currency, pin) {this.owner owner;this.currency currency;this.pin pin;} }const ITshare new Account(ITshare, EUR, 21211); console.…

视频:Python深度学习量化交易策略、股价预测:LSTM、GRU深度门控循环神经网络|附代码数据...

全文链接&#xff1a;https://tecdat.cn/?p37539 分析师&#xff1a;Shuo Zhang 本文以上证综指近 22 年的日交易数据为样本&#xff0c;构建深度门控循环神经网络模型&#xff0c;从股价预测和制定交易策略两方面入手&#xff0c;量化循环神经网络在股票预测以及交易策略中的…

zabbix对接Grafana

1.grafana安装 Download Grafana | Grafana Labs sudo yum install -y https://dl.grafana.com/oss/release/grafana-11.1.4-1.x86_64.rpm 2.zabbix插件安装 Grafana 默认并没有 zabbix 数据源的支持&#xff0c;只有安装了zabbix插件&#xff0c;才可以在grafana中添加zabbi…

【Rust光年纪】探索Rust嵌入式开发利器:从硬件访问到USB绑定

Rust硬件访问库全面比较&#xff1a;选择最适合你的工具 前言 随着物联网和嵌入式系统的普及&#xff0c;对于树莓派等硬件设备的访问需求逐渐增加。在Rust语言领域&#xff0c;为了满足这一需求&#xff0c;出现了一系列针对树莓派和嵌入式设备的硬件访问库。本文将介绍其中…

Simulink代码生成:关系运算与逻辑运算

文章目录 1 引言2 模块使用实例2.1 关系运算2.2 关系运算 3 代码生成4 总结 1 引言 在Simulink中经常需要判断两个信号的大小关系、是否相等&#xff0c;或者判断布尔类型信号的与、或、非等。本文研究通过关系运算与逻辑运算模块实现上述需求。 2 模块使用实例 2.1 关系运算…

操作系统:实验一进程控制实验

一、实验目的 1、掌握进程的概念&#xff0c;理解进程和程序的区别。 2、认识和了解并发执行的实质。 3、学习使用系统调用fork()创建新的子进程方法&#xff0c;理解进程树的概念。 4、学习使用系统调用wait()或waitpid()实现父子进程同步。 5、学习使用getpid()和getppi…