configuration - 了解 kafka 生产者的 max.inflight 属性

标签 configuration apache-kafka kafka-producer-api producer

我在 1.0.0-cp1 版本的 Kafka 集群的工作台上工作。

在我的部分工作人员中,我专注于在订购保证和无数据丢失(只有一个分区的主题)的情况下可能的最大吞吐量,我需要设置 max.in.flight.requests.per.connection属性(property)到1 ?

我已阅读 this article
而且我知道,如果我使用 retries 在我的生产者处启用重试功能,我只需将 max.in.flight 设置为 1属性(property)。

另一种问我的问题的方式:只有一个分区+重试=0(生产者 Prop )就足以保证Kafka中的排序?

我需要知道,因为增加 max.in.flight 会大大增加吞吐量。

最佳答案

您的用例有点不清楚。您提到了排序和无数据丢失,但没有说明您是否容忍重复的消息。因此,如果您想要至少一次(QoS 1)或恰好一次,这是不干净的

无论哪种方式,当您使用 1.0.0 并且仅使用单个分区时,您应该查看 Idempotent Producer 而不是调整 Producer 配置。它允许正确有效地保证排序并且不会丢失数据。

从文档:

Idempotent delivery ensures that messages are delivered exactly once to a particular topic partition during the lifetime of a single producer.



早期的幂等生产者被逼max.in.flight.requests.per.connection到 1(出于您提到的相同原因)但在最新版本中,它现在可以与 max.in.flight.requests.per.connection 一起使用设置为最多 5 并仍然保持其保证。

使用幂等生产者,您不仅可以获得更强的交付语义(恰好一次而不是至少一次),而且它的性能甚至可能更好!

我建议您检查交付语义 in the docs

回到你的问题

是的,没有幂等(或事务性)生产者,如果您想避免数据丢失(QoS 1)并保持排序,您必须设置 max.in.flight.requests.per.connection到 1,允许 retries并使用 acks=all .正如您所看到的,这会带来显着的性能成本。

关于configuration - 了解 kafka 生产者的 max.inflight 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49802686/

相关文章:

tomcat - 在 Tomcat 中基于每个应用程序的自定义类路径

c# - 从不同的项目读取 Properties.Settings.Default

java - Spring Cloud Stream 中的 Autowiring 问题

java - kafka连接错误: cannot find or load main class

apache-kafka - 为什么在 Kafka Connect 中使用 JDBC Sink Connector 无法删除记录

apache-kafka - Kafka 生产者/消费者打开了太多的文件描述符

c# - CreateLogger() 之前被调用过,只能调用一次

java - 在 java 中加载 Web 应用程序特定配置和设置的首选方法是什么

logging - 配置Kafka Connect分布式连接器日志(connectDistributed.out)

apache-kafka - 流查询使用多少个 Kafka 消费者来执行?