在 Kafka 生产者上启用幂等性是否会降低吞吐量

2024-04-05

我有卡夫卡制作人启用幂等性(没有启用一次语义或事务)在休息端点调用中。我启用它的原因是因为我不希望卡夫卡重试导致任何重复。我担心以下几点:

  • 幂等性会减慢我的端点速度吗? (这个端点需要非常快)
  • 我读了 kafka api 文档,启用幂等性将使重试无限(什么?)
  • 如果我不将幂等性用于事务,我真的需要幂等性吗?

Apache Kafka 3.0 更新根据Apache Kafka 3.0公告 https://www.confluent.io/blog/apache-kafka-3-0-major-improvements-and-new-features生产者默认启用最强的交付保证(acks=allenable.idempotence=true)。这意味着用户现在默认获得订购和持久性。


“幂等性会减慢我的端点速度吗?(这个端点需要非常快)”

Kafka 允许使用内部序列号以幂等方式生成消息。这是在代理端缓存和比较的,因此生成消息会更耗时。此外,虽然您可以有多个正在进行的写入请求,但如果一个请求失败,后续的几个请求也会失败,并出现可重试的 OutOfSequenceException,这也可能会减慢生产者的速度。

然而,与禁用幂等性的生产者相比,这两个确实是很小的补充,而且我不知道有任何综合基准来衡量吞吐量或延迟的差异。最好是在您的实际环境中进行测试。

“我读了 kafka api 文档,启用幂等性将使重试无限(什么?)”

根据配置说明启用幂等性 https://docs.confluent.io/platform/current/installation/configuration/producer-configs.html#enable.idempotence它说: ”当设置为“true”时,生产者将确保每条消息的一份副本准确写入流中。如果为“false”,则生产者由于代理故障等原因重试,可能会在流中写入重试消息的重复项。请注意,启用幂等性需要max.in.flight.requests.per.connection小于或等于5,retries大于 0 且acks必须是“全部”。如果用户没有明确设置这些值,则会选择合适的值。如果设置了不兼容的值,将抛出 ConfigException。"

请记住,重试的默认值无论如何都是2147483647(我认为的意思是infinite)。请随意将此值设置为较小的数字,但仍大于 0。

关于幂等 KafkaProducer 的排序保证,即使有多个正在进行的请求,我已经写了一篇答案here https://stackoverflow.com/questions/49982786/why-is-there-inconsistency-in-kafkas-ordering-guarantees-when-using-idempotent.

“如果我不将幂等性用于交易,我真的需要幂等性吗?”

我无法告诉您的要求是什么,但在生产者端启用幂等性可确保不会因代理或生产者故障而创建重复项。

请记住,Kafka 中的事务有两个方面,不仅是生产者,还包括消费者。如果您使用交易,您还想查看您的消费者配置isolation.level.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Kafka 生产者上启用幂等性是否会降低吞吐量 的相关文章

随机推荐

  • 每 5 秒用 String 数组中的每个字符串更新 TextView

    我有一个TextView我想更新TextView每 5 秒对字符串数组中的每个字符串进行一次 这是我尝试过的代码 它始终仅显示字符串数组中的最后一个字符串 TextView display EditText caption Thread t
  • 为什么我无法获得这个 numpy 数组的形状?

    我正在使用导入 matlab 文件scipy io 并试图找到它的尺寸 看起来 即使文件被加载到 python 中 它也无法给出尺寸 这是为什么 以及如何解决这个问题 gt gt gt import scipy io gt gt gt pr
  • URL 的数据类型

    我读到 URL 的最大长度可以是 2 000 个字符 因此 我有一个带有 varchar 2000 列类型的表来存储 URL 但此列不能只索引前 1000 个字符 如下所示 URL 的推荐数据类型是什么 mysql gt create ta
  • 如果任何命令失败,则与 exit 并行运行命令将失败

    需要 bash 脚本方面的帮助 目标是 并行运行多个命令 如果任何命令返回非零退出状态 则退出 1 I e 使用中间命令运行有错误 parallel commands echo 1 echo 2 echo 3 echo OK 1 3 par
  • Eclipse:不允许我使用 Android SDK,错误地声称我的 ADT 已过时

    我正在使用 Eclipse 进行 Android 开发 直到昨天一切都运行良好 我使用 Ninite 更新了我的所有内容 包括 JRE 和所有内容 专业提示 不要这样做 并且它在编辑工作区的过程中无需询问就重新启动了我的计算机 这导致了各种
  • elisp:有没有办法获取当前 .el 模块的名称(如 C 中的 __FILE__ )?

    在我的 elisp 模块的顶部 我想做一些简单的事情 message concat Loading expand file name current elisp module 您可以使用变量load file name https www
  • 使用 SelectQuery 对象构建嵌套条件

    我可以使用构建嵌套条件吗SelectQuery object 我想得到 select from car where car color blue or car model Genesis or car manufactor ford and
  • Spring Boot 单元测试中的@SpringBootTest、@ContextConfiguration、@Import

    我正在开发一个 Spring Boot 项目 我正在写一个Unit Test代码基于TDD这有点困难 SpringBootTest加载所有 bean 这导致测试时间更长 所以我用了 SpringBootTest的班级名称 我正常完成了测试
  • Android 前台服务在 MI 4 设备(版本 5.0.2)上被终止

    我知道这个问题被问了很多次 但我没有找到任何解决方案来保持服务 即使我的应用程序被杀死 我的应用程序在所有设备上运行 但是一些设备如果我杀死该应用程序 那么我的服务也会被杀死 设备名称 MI 4 版本和 asus 5 0 3 以下是我启动前
  • Java:返回类(不是实例)

    是否可以在静态方法中返回一个类 我会解释 I have public class A public static void blah public class B 我想在 B 中创建一个静态方法返回A 所以你可以这样做 A blah And
  • 在 Parenscript 中使用 regex(正则表达式)

    我正在尝试 Parenscript 在尝试使用正则表达式函数时 我得到了意外的输出 例如 参考手册 https common lisp net project parenscript reference html shows regex f
  • C#4 动态关键字 - 为什么不呢?

    看了很多回复后这个线程 https stackoverflow com questions 244302 what do you think of the new c 40 dynamic keyword 我看到许多不喜欢它的人都提到了滥用
  • 嵌入式 C++ (ARM9) 单元测试

    我来自 Java 和 JUnit 的世界 我演示了 Hudson 以及我使用 JUnit 取得的所有成果 我想在嵌入式设备上对 C 代码执行相同的操作 但找不到从哪里开始 该项目使用 iccarm exe IAR 编译器 进行编译 现在使用
  • Spring AOP 日志拦截器和 JAXB 问题

    我正在尝试将日志记录方面实现到我的应用程序中 这是我第一次尝试 AOP 所以如果我遗漏了一些明显的东西 请告诉我 为了实现编织外部 jar 我正在尝试实现加载时间编织器 我确实在应用程序上下文中指定了加载时编织器 并在 context xm
  • PHP Mysqli 语句返回单行,-1 行受影响,并且没有错误

    这太令人困惑了 我一定错过了一些简单的东西 我有一个查询 检查我插入的事务是否已经存在 以防止重复 这是代码 function isaDupe portableDB transactArray ref transactArray refer
  • 如何使用 UISwipeGestureRecognizer 将“点击”传递给 UIView 下方的 UIButton?

    我在 透明 UIView 下方有一个 UIButton 上面的 UIView 添加了一个 UISwipeGestureRecognizer 这是它的唯一目的 检测某些滑动手势 我希望该 UIView 忽略所有其他触摸 并传递给其他视图 例如
  • 当文本字段开始编辑 iPhone 时表视图滚动

    我在 iPhone 应用程序中有表视图控制器 表视图有两个部分 第一部分有两行 第二部分有一行 第二部分有一个自定义表格视图单元格 第二部分有一个文本字段 当文本字段开始编辑并且键盘弹出时 该文本字段会隐藏 我希望这个表格视图在键盘弹出时滚
  • Redis 写入 .ssh/authorized_keys

    当前设置 2 个主服务器 12 个工作服务器 工作人员通过 ssh copy id 连接到主设备 主设备和工作人员正在主设备上的 redis 队列中写入数据 过去一周我遇到的问题是 Redis 正在将数据写入authorized keys
  • 将坐标(地理位置)存储在数组中以计算距离

    我和我的搭档正在为我们的学校论文开发一个练习网络应用程序 我们正在尝试使用地理定位 API 的 watchposition 函数获取跑步者的位置并在锻炼期间跟踪他 跑步者可以在屏幕上查看他当前的距离 这是我们被卡住的点 我们只能计算起点和终
  • 在 Kafka 生产者上启用幂等性是否会降低吞吐量

    我有卡夫卡制作人启用幂等性 没有启用一次语义或事务 在休息端点调用中 我启用它的原因是因为我不希望卡夫卡重试导致任何重复 我担心以下几点 幂等性会减慢我的端点速度吗 这个端点需要非常快 我读了 kafka api 文档 启用幂等性将使重试无