首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用事务性API,并且只需与常规生产者和消费者使用一次

使用事务性API,并且只需与常规生产者和消费者使用一次
EN

Stack Overflow用户
提问于 2020-12-18 18:21:44
回答 1查看 31关注 0票数 0

当涉及到exactly-once/transactions/idempotence.时,我能够找到所有关于Kafka Streams应用程序的融合文档

然而,事务的API是在“常规的”生产者/消费者级别上引入的,所有的解释和图表都集中在它们上面。

我想知道在没有Kafka流的情况下是否可以直接使用这些API。我确实理解Kafka处理边界和保证的后果,我可以违反它。我不需要百分之百的精确-一次保证,偶尔有一个副本是可以的,例如,当我从外部系统读取/写入外部系统时。我面临的问题是,我需要为大数据项目创建一个ETL管道,当应用程序被Kubernetes自动重新声明/重新定位到不同的主机时,我们会得到很多副本。一般来说,有一些重复并不是问题,这是一个分析管道,重复是可以接受的,但如果这个问题至少在Kafka方面能得到缓解-那就太好了。使用事务性API会保证Kafka至少一次(以确保重新分配/关闭/伸缩活动发生时不会发生重新处理)吗?

切换到Kafka Streams不是一个选择,因为我们在项目中相当晚。

EN

回答 1

Stack Overflow用户

发布于 2020-12-18 19:08:15

使用常规生产者和消费者也可以实现只需一次的语义。Kafka Streams就是建立在这些客户端之上的。

我们可以使用幂等生成器来实现这一点。

在处理外部系统时,确保我们不会一次又一次地使用producer.send()生成相同的消息,这一点很重要。幂等性适用于Kafka客户端的内部重试,但不会处理对send()的重复调用。

当我们产生来自源的消息时,我们需要确保源不会产生重复的消息。例如,如果它是一个数据库,则使用WAL并最后维护该WAL的最后一次读取偏移量,然后从该点重新启动。例如,Debezium就是这样做的。您可以检查它是否支持您的数据源。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65355274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档