我有2种方法:
方法1
Kafka --> Spark Stream (processing data) --> Kafka -(Kafka Consumer)-> Nodejs (Socket.io)
方法2
Kafka --> Kafka Connect (processing data) --> MongoDB -(mongo-oplog-watch)-> Nodejs (Socket.io)
注意:在方法2中,我使用mongo-oplog-watch
来检查何时插入数据。
在实时应用程序上下文中,将Kafka用作存储与使用MongoDB等其他存储相比,优缺点是什么?
答案 0 :(得分:1)
Kafka主题通常具有保留期(默认为7天),之后将被删除。但是,没有硬性规定,我们一定不能坚持卡夫卡。
您可以将主题保留期设置为-1
(reference)
我知道在Kafka中持久存储数据的唯一问题是安全性。 Kafka开箱即用(截至目前为止)不提供静态数据加密。您需要使用自定义解决方案(或本地解决方案)才能做到这一点。
Protecting data-at-rest in Kafka with Vormetric
也有一个KIP,但它正在讨论中
Add end to end encryption in Kafka (KIP)
另一方面,MongoDB似乎提供了静态数据加密。
Security data at rest in MongoDB
最重要的是,它还取决于要存储的数据类型以及要使用的数据。
例如,如果您要处理非常复杂的数据(不像键值那样容易,即提供键并获得值模型),例如通过索引字段进行查询等(通常与日志类似),那么MongoDB可能有意义。
简单来说,如果您要查询多个字段(而不是键),那么将其存储在MongoDB中是有意义的,如果您打算将Kafka用于此目的,则可能最终创建每个领域都要查询的话题...太多了。