【问题标题】:Dealing with Kafka Producer connection loss处理 Kafka Producer 连接丢失
【发布时间】:2020-04-05 01:34:42
【问题描述】:

这本身并不是一个编码问题,而更像是实时流应用程序的架构设计。我们有以下设置:

  • 现场有多个嵌入式 IoT 设备(内存非常低,但可以选择拥有一些扩展的本地存储)
  • 他们都将数据实时流式传输到 Kafka 集群,充当生产者,然后我们有后处理应用程序充当消费者并帮助将数据存储在数据库中。
  • 现在,有时这些物联网设备会失去与 Kafka 集群中某个节点的连接,因为现场的网络连接并不总是可靠的。这种断开连接通常会持续一天。

现在我了解到 Kafka 负责处理集群中出现故障的节点(充当代理),但是如果我遇到生产者没有良好的网络连接并且无法将其数据发布到 Kafka 主题的情况怎么办因为它看不见?

我们不能丢失任何数据,但好消息是我们为嵌入式 IoT 设备提供了可扩展的存储选项,我们可以在 IoT 设备离线时保存数据,然后在连接恢复时进行流式传输。这是卡夫卡推荐的东西吗?特别是我有以下问题:

  1. Kafka 是否有内置方式让生产者拥有某种离线磁盘(非内存)存储缓存?
  2. Kafka 如何处理由于网络连接问题而无法发送的主题消息?有没有办法将它们安排在一个队列中,然后等到与集群的连接恢复?
  3. 我可以使用哪些本地存储选项,并且可以轻松地与我的磁盘缓存进行交互?
  4. 有一个冗余的本地时间序列数据库(在嵌入式设备的存储上)如何收集所有数据流,然后让代理负责将数据发送到 Kafka 集群,然后清理数据库何时收到 Kafka 代理的确认?
  5. 有没有其他方法来处理Kafka生产者与集群的间歇性连接并且可以在连接时以块的形式发送流数据的情况?

【问题讨论】:

  • 我也会仔细阅读文档,以防我在那里找到一些建议或提示,到目前为止我在这里找到了该部分:kafka.apache.org/intro.html(Kafka 作为存储系统)然后还有一些关于持久性的信息在这里:kafka.apache.org/documentation/#design。我会继续寻找,但我希望有人以前已经处理过这个问题并且可以启发我或指出我正确的方向!

标签: apache-kafka iot


【解决方案1】:

Kafka 生产者不提供离线模式,它不能以块 AFAIK 的形式流式传输数据。 我建议你做的是对生产者发送进行回调,并在失败时将消息内容写入本地存储。然后你应该有一个后台线程,从本地存储中挑选所有刷新的数据,并无休止地尝试使用生产者发送它。基本上,对于您在设备上使用时间序列数据库的建议,这是一种天真的方法。但无论是设备上的 FS 还是 DB,这是满足您需求的唯一方法。

【讨论】:

  • 对于任何再次遇到这个问题的人来说,我们最终使用了一个基于 MQTT 的消息传递系统,它基本上完全符合我在原始问题中描述的需求。随意分享任何对您有用的不同建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 2018-04-29
  • 2015-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多