使Kafka生产者和消费者同步

时间:2017-08-01 07:40:18

标签: apache-kafka

我有一个kafka制作人和消费者.kafka制作人正在发布一个主题,并且获取数据并完成一些处理。 kafka消费者正在阅读另一个主题,关于主题1的数据处理是否成功,即主题2是成功还是失败消息。现在我开始我的消费者,然后将数据发布到主题1.我想制作生产者和消费者同步,即一旦生产者发布数据,消费者应该读取该数据的成功或失败消息,然后生产者应该继续下一组数据。

3 个答案:

答案 0 :(得分:0)

Apache Kafka和发布/订阅消息传递通常寻求通过使用流异步事件来解耦生产者和消费者。您所描述的更像是批处理作业或同步远程过程调用(RPC),其中生产者和消费者显式耦合在一起。标准的Apache Kafka生产者/消费者API不支持此消息交换模式,但您始终可以在使用相关ID,消耗ACK和请求/响应消息的Kafka API之上编写您自己的简单包装器,以使您自己的界面具有行为如你所愿。

答案 1 :(得分:0)

我刚刚开始构建基于kafka的处理环境。

我想模拟某些请求的同步调用 - 我明确地不想要实际的同步调用(否则我不会查看kafka)。

我的想法是以下......

  1. 请求到达多线程入口点处理程序(可能是 网络服务器)
  2. 处理程序(在接收线程上)发送请求 进入kafka总线进行处理 - 它不等待响应。
  3. 处理程序注册同步模拟器(SS)和
    收到未来的回报
  4. 处理程序轮询未来,直到将来表明完成 这有效地阻止了处理程序线程,直到超时或完成,并且需要模拟同步调用。
  5. 同时...... 请求由总线上的消费者在某处处理 消费者将完成消息发送到总线
  6. 完成消息到达正在由同步模拟器(SS)读取的完成消费者。 SS将收到的完成消息与已注册的等待请求相匹配。 在找到匹配时,SS将请求标记为完成。 与请求关联的未来会观察更新并指示完成。 轮询未来的线程恢复处理。 结果将返回给来电者
  7. 在我实际执行上述内容之前,我并不了解任何细节,但这似乎是可行的。

    我感谢任何人提供的任何建设性意见!

答案 2 :(得分:0)

简短回答:你不能那样做,Kafka 不提供这种支持。

长答案: 正如 Hans 解释的那样,发布/订阅消息传递模型使发布和订阅完全不知道彼此,我相信这就是该模型的强大之处。生产者可以生产而不必担心是否有消费者,消费者可以消费而不必担心有多少生产者。

你能做的最接近的是,你可以让你的生产者同步。这意味着您可以等到您的消息被经纪人收到并确认。

如果您想这样做,请在每次发送后刷新。