我们正在评估持久化流式事件(来自许多不同用户的网络浏览器中的用户点击事件(的可能方法,以便我们能够构建自定义用户面板,以便稍后分析这些点击事件。我们计划使用Kafka作为中间层来接收来自各种用户浏览器的大量流数据。然而,我很想知道Kafka是否也可以作为一个持久数据库来存储这些事件,这样我们以后就可以构建Dashboard应用程序,并让它通过我们设计的一些后端web API查询事件。
从本质上讲,这就是我们现在的想法:
仪表板前端---neneneba API--->后端服务----查询---->Kafka(存储用户点击事件(
这篇文章提到,Kafka可以作为一个持久数据库,应用程序可以查询它,但它不能"替换";传统数据库。我可以想象,如果Kafka被用作持久数据库,那么巨大的成本开销,但Kafka分层存储可能是降低存储成本的一个可能的解决方案?
总的来说,为了能够设计一个自定义的仪表板来查询摄入的事件流,是否建议使用Kafka作为DB的替代品,或者我们应该考虑将Kafka与传统的SQL/noSQL数据库或其他类型的数据库集成?对于这些类型的用例,有什么关于哪些持久DB与Kafka配合良好的建议吗?
是和否
RocksDB(或自定义状态存储(将允许您";查询";通过KSQL或Kafka Streams的Kafka数据;你不会有API直接替代卡夫卡。Confluent最近还发布了一个播客,讨论针对Kafka和/或数据库层的GraphQL查询。
关于分析,最好使用Elasticsearch(与Kibana一起使用(、Apache Pinot或Druid(与Apache SuperSet一起使用(等工具进行点击流分析和Dashboard,并使用Kafka作为将数据导入这些位置的渠道。
总的来说,frontend -> backend -> kafka -> db
的方法是好的。假设吞吐量达到了需要引进卡夫卡的水平。
是否建议使用Kafka作为DB替代
无
我们应该考虑将Kafka与传统的SQL/noSQL数据库或其他类型的数据库集成吗?
是
对于这些类型的用例,有什么关于哪些持久DB与Kafka配合良好的建议吗?
这更多地取决于工作场所的上下文、约束和要求。预期吞吐量?哪些数据库已经存在?首选哪种编程语言?
您可以在oltp数据库(如postgres(上运行olap风格的仪表板和分析查询。许多团队对读取的副本进行分析。
这方面的蓝筹数据库是弹性搜索、编辑或大查询。火箭飞船是雪花和灯塔。
另一种选择是允许数据科学团队[如果有数据科学团队]将卡夫卡流直接摄入spark或其他系统中,并直接在软管上进行处理,以提供所需的仪表板