【问题标题】:Making Kafka producer and Consumer synchronous使 Kafka 生产者和消费者同步
【发布时间】:2018-01-07 23:05:33
【问题描述】:

我有一个 kafka 生产者和消费者。kafka 生产者正在发布到一个主题,并获取数据并完成一些处理。 kafka 消费者正在从另一个主题读取主题 1 的数据处理是否成功,即主题 2 有成功或失败消息。现在我正在启动我的消费者,然后将数据发布到主题 1。我想让生产者和消费者同步,即一旦生产者发布数据,消费者应该读取该数据的成功或失败消息,然后生产者应该继续处理下一组数据。

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

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

    详细回答: 正如 Hans 所解释的,发布/订阅消息传递模型使发布和订阅完全不了解彼此,我相信这就是该模型的强大之处。生产者可以生产而不用担心有没有消费者,消费者可以消费而不用担心有多少生产者。

    您可以做的最接近的是,您可以使您的生产者同步。这意味着您可以等到您的消息被代理接收并确认。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 请您提供一个代码示例,说明如何使其同步 RPC
      • 我可以让Kafka监听器休眠还是等到数据到达?
      • 它已经做到了。当您在侦听器中调用 poll() 时,您会给它一个以毫秒为单位的超时等待数据的时间。如果您 p​​oll(60000) 它将等待长达 1 分钟的数据。如果数据提前到达,它将提前返回数据。如果在一分钟内没有数据到达,它将等待整整 60 秒并返回 null。然后你再次投票。如果您以前做过,这就像 Web 应用程序中的 HTTP 长轮询一样。
      • @HansJespersen 请问有没有办法在没有Kafka的情况下实现spark-streaming的同步通信?例如有没有办法使用 Http 请求/响应?
      • 我无法回答“没有 kafka”。我只知道如何使用 Kafka Streams 来做到这一点,而不是 Spark Streaming
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 2019-10-16
      相关资源
      最近更新 更多