当前位置: 首页 > 知识库问答 >
问题:

Spring语义学Kafka

江展
2023-03-14

我需要在由以下组件组成的系统中应用事务:

  1. Kafka生产者,这是一些外部应用程序,可以发布有关kafka主题的消息。
  2. 一个Kafka消费者,这是一个Spring启动应用程序,我在其中配置了kafka侦听器,处理完消息后,需要将其保存到非关系型数据库中。

我看过好几个这样的博客

我没有看到任何明确的例子或博客来实现与我类似的用例中的事务性,即在单个原子事务中生成-处理-写入数据库。我相信这是非常常见的场景

有人能指导我如何做到这一点吗?任何相关的代码片段都将不胜感激。

共有2个答案

强阳曜
2023-03-14

我猜您正在尝试解决这样一种情况,即您的消费者在写入数据库之后,但在提交偏移量之前,或其他类似的问题。不幸的是,这意味着您必须构建自己的容错能力。

在我上面提到的问题的情况下,这意味着您必须管理最终输出数据库中的消费者偏移量,在您将消费者应用程序的输出写入的同一数据库事务中更新它们。

习和通
2023-03-14

在单个原子事务中。

没有办法做到这一点;Kafka不支持XA事务(大多数NoSQL数据库也不支持)。您可以使用Spring的事务同步实现最大努力1PC。

请参阅文档。

Spring for Apache Kafka实现了正常的Spring事务同步。

它提供了“最大努力1PC”-请参阅Spring中的分布式事务,有XA和无XA以了解更多信息和限制。

 类似资料:
  • XSD规范https://www.w3.org/TR/xmlschema11-1/#declare-schema没有为属性指定语义学: 其他属性(和)是为了方便用户,本规范没有定义它们的语义。 W3C版本控制指南https://www.w3.org/TR/xmlschema-guide2versioning/. 该属性是否应用于指定XML架构文档的版本(例如,2.3.1)或用于编写架构文档的XSD

  • 本文向大家介绍数学逻辑术语和定义,包括了数学逻辑术语和定义的使用技巧和注意事项,需要的朋友参考一下 重言式 重言式是一个对命题变量的每个值始终正确的公式。 示例-证明[(A→B)∧A]→B是重言式 真值表如下- 一种 乙 A→B (A→B)∧A [(A→B)∧A]→B 真正 真正 真正 真正 真正 真正 假 假 假 真正 假 真正 真正 假 真正 假 假 真正 假 真正 我们可以看到[(A→B)∧

  • 我目前正在测试一个相当简单的示例,该示例涉及与spring amqp数据库事务相关的消息传递事务。 用例如下所示: > 数据库操作期间发生故障时的预期行为是,接收到的消息回滚到总线(DefaultRequeueRejected=false),并进入死信队列。此外,发送的消息也应回滚。 我可以通过以下配置实现这一点: 所以这很好——我不明白的是,如果我不在上设置事务管理器,观察到的行为是完全相同的。

  • 我想知道编年史地图中的原子语义学。如果我有一个跨2个节点(服务器)共享的历史映射,并且我试图在两个节点上同时将相同的密钥插入到这个映射中,那么事务语义学是什么? 第一次放会成功,第二次放会失败吗? 我很好奇编年史地图是否保证与ApacheZooKeeper相同的事务语义? 在我的用例中,我想依靠这样一个事实,如果node1将一个键K1放入映射中,node2将能够检查K1的存在,如果它不存在,它将明

  • 一、 我正试图用Kafka信源和信宿测试Flink一次语义: 运行flink应用程序,只需将消息从一个主题传输到另一个主题,并行度=1,检查点间隔20秒 每2秒使用Python脚本生成具有递增整数的消息。 使用read_committed隔离级别的控制台使用者读取输出主题。 手动杀死TaskManager 我希望在输出主题中看到单调递增的整数,而不考虑TaskManager的终止和恢复。 但实际上

  • 我注意到Kafka记录有一个CRC字段。如果日志文件中的记录损坏(例如,消息中间的一个比特被翻转),那么在流应用程序中,我希望看到的是: 该主题被复制 由于我们使用的是Avro,我可以想象以下情况之一: 底层基础设施检测到CRC错误,并从另一个代理获取该错误