2

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

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

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

4

1 回答 1

1

我看到 3 个选项:

  1. 当更新请求到来时,将其放入 kafka 并仅通过消费消息更新缓存。
  2. 您可以将元信息添加到 kafka-key 并通过该键过滤消息。例如:key:instanceName=S1,如果 currentInstanceName != instanceName do_job

注意:key 用于分区器-key/round robin 的 hashCode(取决于 kafka 版本),因此行为可以改变。

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

    {
       "instanceName":"S1",
       "request":{...}
    }
    
于 2015-12-29T12:22:55.477 回答