这本身并不是一个编码问题,而是一个实时流应用的架构设计。我们有如下设置:
- 现场有多个嵌入式物联网设备(内存不足,但可选择扩展本地存储)
- 它们都将数据实时传输到Kafka集群,充当生产者,然后我们有后处理应用程序,充当消费者,帮助将数据存储在数据库中。
- 有时候,这些物联网设备会失去与Kafka集群中某个节点的连接,因为现场的网络连接并不总是可靠的。这种断开通常会持续一天。
现在我知道Kafka负责处理集群中出现故障的节点(充当代理),但是如果出现这样一种情况,即生产者没有良好的网络连接,并且由于看不到数据而无法将其数据发布到Kafka主题,该怎么办?
我们无法承受丢失任何数据的后果,但好消息是,我们为嵌入式物联网设备提供了可扩展的存储选项,我们可以在物联网设备离线时保存数据,然后在连接恢复时传输数据。这是Kafka推荐的吗?特别是我有以下问题:
1.Kafka是否有一个内置的方式,为生产者有某种离线磁盘上(而不是内存中)的存储缓存?
- Kafka是如何处理由于网络连接问题而无法发送的主题消息的?是否有一种方法可以将它们安排在队列中,然后等待到与群集的连接恢复?
1.我可以使用哪种本地存储选项作为磁盘高速缓存,以便轻松连接?
1.让一个冗余的本地时间序列数据库(在嵌入式设备的存储器上)收集所有的数据流,然后让一个代理负责将数据发送到Kafka群集,然后在从Kafka代理获得确认后清理数据库,这怎么样?
1.有没有其他方法来处理这些情况,Kafka生产者有间歇性的连接到集群,并可以只发送流数据块时,它是连接?
1条答案
按热度按时间mbjcgjjk1#
Kafka producer不提供脱机模式,它不能以块AFAIK的形式传输数据。我建议您为producer发送一个回调,如果失败,将消息的内容写入本地存储器。然后,您应该有一个后台线程,该线程从本地存储器中提取所有刷新的数据,并不断尝试使用生成器发送这些数据。基本上,这是一种随时间推移而提出的建议的幼稚方法-但无论是FS还是DB,这都是满足您需求的唯一方法。