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

Kafka交易生产者

郎睿
2023-03-14

Kafka为每条消息生成偏移量。假设,我正在生成消息5,偏移量将从1到5。

但是,在事务生产者中,比如说,我产生了5条消息并提交,然后是5条消息但中止,然后是5条消息提交。

>

  • 那么,最后提交的5条消息的偏移量是6到10还是11到15?

    如果我不放弃或不promise呢。这些信息还会被发布吗?

    Kafka是如何忽略未promise的补偿的?因此,kafka提交日志是基于偏移量的。它是否使用事务使用者的事务提交日志来提交偏移量并返回最后一个稳定的偏移量?或者,是来自维护偏移量的_事务_状态主题?

  • 共有1个答案

    陆翰学
    2023-03-14

    >

  • 最后5条消息的偏移量为11到15。使用隔离时。level=read_committed,消费者将从偏移量6“跳”到11。

    如果您不提交或中止事务,它将在事务之后自动超时(中止)。最大超时。ms已经过去。

    除了消息数据,Kafka还存储了一堆元数据,并能够识别每条消息是否已提交。提交偏移量与写入分区相同(唯一的区别是它是由Kafka在内部主题__consumer_offsets中自动完成的),它对偏移量的工作方式相同。通过sendOffsetsToTransaction()添加的已中止或未提交的偏移量将自动跳过。

    正如你在另一个问题中提到的,我建议你看看《Kafka》中增加了一次语义的基普。它详细介绍了所有这些机制,并将帮助您更好地理解:https://cwiki.apache.org/confluence/display/KAFKA/KIP-98-仅一次交付和事务性消息传递

  •  类似资料:
    • 我正在处理一个kafka用例,在这个用例中,我需要在生产者和消费者端具有事务性语义...我可以使用kafka transaction API 0.11将事务性消息发布到kafka集群,但在消费者端,我面临着一个问题...我在属性文件中设置了但我不能使用它...我可以看到消息被使用但这不是希望的... 生产者代码 ProducerTX.Properties 消费者 感谢你的帮助..谢谢

    • 我们有一个使用Kafka的Spring-Cloud-Stream应用程序。要求是在生产者端,消息列表需要放在事务的主题中。同一应用中的消息没有消费者。当我使用spring启动事务时。云流动Kafka。粘合剂交易事务id前缀,我面临的错误是调度程序没有订阅服务器,并且从主题获得的分区总数少于配置的事务。应用程序无法在事务模式下获取主题的分区。你能告诉我是否遗漏了什么吗。明天我会发布详细的日志。 谢啦

    • 我们有一个基于spring boot的事务性Kafka制作人!使用的版本如下 spring-boot-starter-父-2.3.0。释放 spring-kafka-2.5.0。释放 我们的kafka(集群)版本是2.1. x! 作为生产者,我们启用了幂等性,定义了事务id前缀,并在事务中执行kafka模板调用。我们还有一个将隔离级别设置为只读的使用者! 现在我们遇到了一个行为,不知道如何推断,

    • 从这篇文章https://www.confluent.io/blog/transactions-apache-kafka/ 使用为至少一次交付语义配置的vanilla Kafka生产者和消费者,流处理应用程序可能会以以下方式完全丢失一次处理语义: 制片人。由于内部重试,send()可能导致重复写入消息B。这是由幂等生产者解决的,而不是本文其余部分的重点 2.我们可能会重新处理输入消息A,导致重复的

    • 我们使用StreamListeners for Spring Kafka,并使用基于JPA的发件箱发送消息。发件箱是从消费中异步清空的,因此我们不希望“从JPA表读取,向Kafka生成消息”上的事务。 但是我们也有重试主题,因此如果使用失败,我们会将失败的消息移动到重试主题(最终是DLT),这确实需要事务性的。 据我所知,只有在全局基础上(设置事务id前缀),而不是在具体绑定上,才有可能为生产者打

    • 我想让我的Kafka制作人变得富有交易性。我正在发送10条消息。如果发生任何错误,则不应向Kafka发送任何消息,即无或全部。 我使用的是Spring Boot KafkaTemplate。 我正在发送文件中提到的10条信息,如下所示。应发送9条消息,且I消息大小超过1MB,由于 https://docs.spring.io/spring-kafka/reference/html/#using-K