Configuration 了解卡夫卡制作人的最大飞行属性
我在版本1.0.0-cp1的卡夫卡集群的工作台上工作 在我的工作台中,有一部分人专注于在保证订购和无数据丢失的情况下实现最大吞吐量(一个只有一个分区的主题),我需要将Configuration 了解卡夫卡制作人的最大飞行属性,configuration,apache-kafka,kafka-producer-api,producer,Configuration,Apache Kafka,Kafka Producer Api,Producer,我在版本1.0.0-cp1的卡夫卡集群的工作台上工作 在我的工作台中,有一部分人专注于在保证订购和无数据丢失的情况下实现最大吞吐量(一个只有一个分区的主题),我需要将max.In.flight.requests.per.connection属性设置为1 我读过 我知道,如果我在我的制作人处使用retries属性启用重试功能,我只需将max.in.flight设置为1 问我问题的另一种方式是:只有一个分区+重试次数=0(生产者道具)就足以保证卡夫卡中的排序 我需要知道,因为增加最大飞行时间会大幅增
max.In.flight.requests.per.connection
属性设置为1
我读过我知道,如果我在我的制作人处使用
retries
属性启用重试功能,我只需将max.in.flight设置为1
问我问题的另一种方式是:只有一个分区+重试次数=0(生产者道具)就足以保证卡夫卡中的排序
我需要知道,因为增加最大飞行时间会大幅增加吞吐量。您的用例有点不清楚。您提到了排序和无数据丢失,但没有指定是否允许重复消息。所以,如果你想要至少一次(QoS 1)或恰好一次,这是不干净的 无论哪种方式,由于您使用的是1.0.0,并且只使用一个分区,因此您应该查看幂等生产者,而不是调整生产者的配置。它允许正确有效地保证订购,并且不会丢失数据 从文件中: 幂等传递确保消息只传递一次 在单个主题的生命周期内,将其复制到特定的主题分区 制片人 早期的幂等生成函数将
max.in.flight.requests.per.connection
强制为1(与您提到的原因相同),但在最新版本中,它现在可以与max.in.flight.requests.per.connection
一起使用,最多设置为5,并且仍然保持其保证
使用幂等生产者,您不仅可以获得更强的交付语义(仅一次而不是至少一次),而且它甚至可以执行得更好
我建议您检查一下交付语义
回到你的问题上来
是,如果没有幂等(或事务)生成器,如果要避免数据丢失(QoS 1)并保留顺序,必须将
max.in.flight.requests.per.connection
设置为1,允许重试
并使用acks=all
。正如您所看到的,这会带来巨大的性能成本。是的,您必须将最大飞行请求数.per.connection
属性设置为1
。
在您阅读的文章中,作者写道,这是一个最初的错误(目前已更正):
每个会话的最大飞行次数请求数
卡夫卡文献中没有
本勘误表可能来自《卡夫卡权威指南》(第一版),您可以在第52页阅读:
如果您看到底部的注释,您将看到从
max.in.flight.requests.per.connection
到max.in.flight.requests.per.session
的更正,如果您想保留消息顺序,我不确定是否可以将max.in.flight.requests.per.connection设置为5。如果一条消息被拒绝并需要重试,但在中途第二条消息已被发送并写入主题,则第一条消息将在第二条消息之后写入主题。为了避免这种情况,您只能有一条消息在传输中。我知道,如果您只希望一次准确交货,您可以将此属性设置为5