tldr:我想建立一个角度应用程序,它的节点后端实时显示数据,数据流的源是kafka流,其数据存储在postgres数据库中。
我对一些话题还很陌生,但我相信我能做到这一点,但很可能不是以一种“最佳实践”的方式。我很难弄清楚这是一种怎样的现代而高效的方法。理想情况下,我正在寻找一个关于如何以最佳实践的方式来处理这个问题的高级概述。
我现在有一个python用户,它监听流并将数据存储在postgres数据库中。什么是向许多客户端实时提供这些数据的好方法?我是使用websockets还是使用http从数据库中流数据?我是否应该抛弃python,在NodeJS中创建一个使用者,直接将其转发给客户端,从而选择跳过数据库?
发布于 2022-09-30 19:58:00
是的,您需要使用websockets进行更新。但是,Kafka对此没有帮助,但您需要找到一些解决方案,将Kafka与websocket客户端结合起来。
比如socket.io ..。
// Listen for Kafka
consumer.on('message', ({ value, }) => {
// Parse the JSON value into an object
const { payload, } = JSON.parse(value)
console.log('\n\nemitting from kafka:', payload)
// Emit the message through all connected sockets
io.emit("kafka-event", payload)请记住,上述代码只适用于一个客户端。新套接字不会启动新的消费者,因此只会看到最新的当前偏移量的内部卡夫卡消费者。如果您启动多个Kafka使用者(或多个节点后端),那么您可能只看到在每个套接字事件中使用的Kafka分区的子集.
否则,卡夫卡对这个问题没有什么特别之处。您将编写一个循环(例如setInterval())来查询某些HTTP (而不是直接的数据库),以查询所有记录和/或上次投票后的新记录。
或者,根据您的用例,查询整个数据库表/集合+添加一些刷新按钮以准确捕获删除(除非您有一个websocket来发送单独的删除事件,并且可以用这些事件更新DOM )。
目前有python-kafka使用者,可以监听流并将数据存储在postgres数据库中。
虽然这可能有效,但卡夫卡连接()的规模可能会更大。
或者,Kafka支持KV查询,因此不需要外部Postgres数据库,这取决于您的查询模式。
因此,可以选择跳过数据库吗?
如果您不关心历史事件的保留,那么您就不需要任何数据库了。只有在建立使用者套接字后,您才会在UI中获得事件,然后在刷新时丢失所有历史记录。
额外的-前面的卡夫卡。类似的答案-您将需要一个带有Kafka生产者客户端的后端服务,因为没有本地HTTP接口。
https://stackoverflow.com/questions/73913032
复制相似问题