【问题标题】:what will be the behaviour of Kafka...?卡夫卡的行为会是什么……?
【发布时间】:2018-06-21 14:47:28
【问题描述】:

我被困在一个典型的用例或场景中,我不确定 Kafka 的行为会是什么......

场景:我正在使用 Spring Kafka 和 Spring Boot。在我的应用程序中,我有一个 Rest 端点,它将从主题的开头读取所有消息以检查消息是否重复,如果不重复则写入主题。

当部署相同微服务的多个实例并且为 seekFromBegining 操作移动偏移量时,我对应用程序的行为感到困惑。

我心中的几个问题是:

do reading from beginning of a topic (with the help of seek) block the topic ?
If Yes. then how to solve this typical use case where we have to validate for the 
duplication of message before writing to the topic.

使用 DB 不是解决方案,因为它会占用大量资源。并使应用程序变慢。

提前谢谢大家

【问题讨论】:

    标签: spring-boot apache-kafka kafka-consumer-api spring-kafka


    【解决方案1】:

    听起来你需要Log Compaction 功能:

    日志压缩确保 Kafka 将始终为单个主题分区的数据日志中的每个消息键至少保留最后一个已知值。

    因此,当您指定一些唯一的message key 时,分区中不会有多个。这样一来,您根本不需要在存储之前阅读主题。

    【讨论】:

    • 是的,我们在写入 Kafka 主题时正在使用密钥。这是否意味着Topic在阅读时不会被一个实例阻塞。
    • 嗯,这与故事无关。我向您建议了完全不同的解决方案,它是 Kafka 中开箱即用的解决方案。如果您可以通过日志压缩解决重复问题,我只是看不出有理由从该 REST 服务中读取任何内容。
    • 谢谢!!!我一定会研究日志压缩功能。这也可以帮助我们删除重复项。但需要进行检查,以便通知使用 rest-endpoint 的应用程序重复消息。
    • 该主题没有屏蔽。您只需每次创建一个具有唯一消费者组的KafkaConsumer 并将auto.offset.reset 用作earliest。因此,这个新组将始终从头开始阅读主题,并且永远不会在同一主题上与其他组发生冲突。但是日志压缩功能仍然存在。这已经是生产者功能,而不是消费者。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2021-11-16
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多