【问题标题】:Generating UUID in response to message sent by Kafka Producer生成 UUID 以响应 Kafka Producer 发送的消息
【发布时间】:2018-06-06 19:18:33
【问题描述】:

我正在尝试开发一个应用程序,它从缓存中读取字节数组(表示 C 结构和与 UUID 关联的每个数组),并通过 C 中的生产者应用程序将其发送到 Kafka 服务器。

kafka生产者应用程序会累积固定数量的此类数据包并一次发送。

我希望完成的是确认批处理中的哪些消息已成功传递并取回它们的 UUID,以便我可以从我的缓存应用程序中清除它们。我是kafka的新手,请指导我完成这项工作的最佳方法。

【问题讨论】:

    标签: c apache-kafka producer


    【解决方案1】:

    为什么不创建另一个消费者主题来“侦听”已确认的消息,然后将它们从缓存中删除。然后生产者可以在需要时将消息推送到该主题。

    【讨论】:

      【解决方案2】:

      向 Kafka 发送消息时,您可以配置您的 Producer 以请求确认(通常公开为名为 acks 的配置)。这允许生产者知道消息是否成功。

      例如,使用librdkafka(我认为最好的 C Kafka 客户端),您可以在生产请求完成时获得交付报告回调。它包含消息和失败时的错误。这应该使您能够轻松识别哪些消息发送成功并将其标记为已发送。

      请参阅rd_kafka_conf_set_dr_msg_cb 方法来配置传递报告回调。 simple producer example 展示了它的用法。

      【讨论】:

      • 感谢您的回复。我已经实现了这个例子。每次交付后,我都会收到“XX 个字节已成功交付”的响应。当我发送 10,000 条消息时,回调会延迟并且消息会连续排队。现在,当我后来一次收到多个回调时,我无法确定它指的是哪条消息。我可以在每条消息中附加一些 UUID 并在回调中获取该 UUID 以了解响应所指的消息吗?这将帮助我以后清除缓存。我是否也可以自己自定义批次以了解特定批次中包含哪些数据包。
      • 您会在传递报告中获得指向邮件 (rd_kafka_message_t *) 的指针,因此您可以检查邮件内容。您还可以在生产 (rd_kafka_produce) 时指定一个 opaque(例如将其设置为 UUID),并且 opaque 将在交付报告中设置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 2013-07-22
      • 1970-01-01
      • 2018-11-01
      相关资源
      最近更新 更多