Node.js 将卡夫卡视为存储时的优势和劣势是什么?

Node.js 将卡夫卡视为存储时的优势和劣势是什么?,node.js,mongodb,apache-kafka,Node.js,Mongodb,Apache Kafka,我有两种方法: 方法#1 Kafka-->火花流(处理数据)-->Kafka-(Kafka消费者)->Nodejs(Socket.io) 进近#2 Kafka-->Kafka连接(处理数据)-->MongoDB-(mongo oplog watch)->Nodejs(Socket.io) 注意:在方法2中,我使用mongo oplog watch检查插入数据的时间 与在实时应用程序上下文中使用另一个存储(如MongoDB)相比,使用Kafka作为存储时的优势和劣势是什么?Kafka主题通常有一个

我有两种方法:

方法#1

Kafka-->火花流(处理数据)-->Kafka-(Kafka消费者)->Nodejs(Socket.io)

进近#2

Kafka-->Kafka连接(处理数据)-->MongoDB-(mongo oplog watch)->Nodejs(Socket.io)

注意:在方法2中,我使用
mongo oplog watch
检查插入数据的时间


与在实时应用程序上下文中使用另一个存储(如MongoDB)相比,使用Kafka作为存储时的优势和劣势是什么?

Kafka主题通常有一个保留期(默认为7天),之后将被删除。尽管如此,没有硬性规定我们不能坚持卡夫卡

您可以将主题保留期设置为
-1
()

据我所知,在卡夫卡中保存数据的唯一问题是安全性。卡夫卡开箱即用(至少到目前为止)不提供静态数据加密。你需要一个定制的解决方案(或者一个自制的解决方案)来实现这一点

KIP也在那里,但正在讨论中

另一方面,MongoDB似乎提供静态数据加密

最重要的是,它还取决于要存储的数据类型以及要对其执行的操作

如果您正在处理非常复杂的数据(不像键值那么简单,例如,给定键并获取值模型),例如,通过索引字段进行查询等(就像您通常对日志所做的那样),那么MongoDB可能是有意义的

简单地说,如果您通过多个字段(键除外)进行查询,那么将其存储在MongoDB中是有意义的,如果您打算将Kafka用于此目的,您可能最终会为每个应查询的字段创建一个主题。。。这太过分了