【问题标题】:Independent producers in Kafka using Spring Boot and load balancerKafka 中使用 Spring Boot 和负载均衡器的独立生产者
【发布时间】:2018-05-27 08:02:52
【问题描述】:

我已经从 Confluent 安装了 Apache Kafka(带有 rest-api 和 schema-registry)。我使用 spring-boot 和 spring-kafka 实现了生产者(每个事件都有在数据库触发器中生成的 uuid)。现在我想将它作为多个实例运行 - 但是在 kafka 中省略重复项的正确方法是什么?如果我在负载均衡器后面有几个 spring-boot 实例,并且每个实例都有具有相同生成的 uuid 的事件,那么如何只将一个发送到 kafka?我可以在 spring 中生成 uuid,但事件的内容仍然是相同的,并且没有必要从每个实例发送它(数据库的触发器无论如何都会向每个生产者发送内容)。

【问题讨论】:

    标签: spring apache-kafka kafka-producer-api spring-kafka


    【解决方案1】:

    我认为你应该看看 Apache Kafka Log Compaction 功能:

    日志压缩至少保留单个主题分区的每个记录键的最后一个已知值。压缩日志对于在崩溃或系统故障后恢复状态很有用。

    因此,您的 UUID 成为记录键,并且此键的一条记录可供另一方的消费者使用。

    【讨论】:

    • 您认为这不是矫枉过正吗?我几乎将有 0ms 用于 compaction.lag.ms - 因此在每个写入的单个事件之后进行清理 :) 压缩不会阻塞 I/O,但它仍然需要来自服务器的一些资源
    • 没有其他方法可以限制生产者端的数据,而且它们是独立的实例。好吧,您可以使用 UUID 的主键将数据存储到数据库中,另一方面,在发送到 Kafka 之前已经轮询该表。另一种解决方案可能类似于消费者方面的filter - 如果您获得具有相同key 的记录,请忽略它。这是 Spring Kafka 的一些解决方案:docs.spring.io/spring-kafka/docs/2.1.0.RELEASE/reference/html/…
    猜你喜欢
    • 2016-01-03
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多