我们如何在Kafka pub / sub中对消息进行版本控制?

时间:2015-12-29 11:55:07

标签: java apache-kafka kafka-consumer-api kafka-producer-api

我有一个关于使用Apache Kafka的问题,详情如下。

我构建了一个服务的3个实例,它们有自己的本地缓存,称为S1,S2,S3。 例如,当更新请求到达S1时,S1将更新自身本地缓存,然后将作业推送到Kafka以更新S2,S3的本地缓存。 在这种情况下我只想S2,S3只得到这份工作,但实际上当我使用Kafka for pub / sub时,所有S1,S2,S3都会得到这份工作。

那么如何处理这个问题,任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:1)

我看到3个选项:

  1. 当更新请求发送到kafka并仅通过消费消息更新缓存时。
  2. 您可以将元信息添加到kafka-key并按该键过滤消息。 例如: 键:实例名= S1, if currentInstanceName!= instanceName do_job
  3. 注意:密钥用于分区 - 密钥/循环的hashCode(取决于kafka版本),因此行为可以改变。

    1. 包装kafka消息并将元信息添加到包装器。例如,如果您使用json:

      {
         "instanceName":"S1",
         "request":{...}
      }