spark结构化流媒体:加入跨年的流媒体

axr492tv  于 2021-05-27  发布在  Spark
关注(0)|答案(0)|浏览(309)

我和我的团队都是spark结构化流媒体的新手,一直在努力理解如何将spark流媒体应用到我们的问题空间中。我公司的所有数据都要转移到kafka,我也需要转移到那个平台(从rabbitmq)。rabbitmq中的队列现在将移动到kafka中的主题。我需要将多个主题聚合在一起用于报告目的,然后将它们转储到数据存储(当前为postgres)。报告数据可以追溯到10多年前,而且总是有新的、传入的数据。
我们未能理解的一个大问题是:
如何将实时数据与跨越多年的历史记录结合起来?
我们试图解决这个问题:
尝试1:
我们最初的方法是对数据进行流到流的连接。我们对这个想法的一个担忧是,由于我们处理历史记录,我们不能保证它们会按顺序到达(一些记录可能会在几个月后到达),而且我们也不能确信所有的数据都会正确地连接在一起。我们还需要在连接上做一些水印,但我们的水印基本上是一直存在的。将所有这些数据存储在内存中并嵌入水印一年以上似乎既不现实也没有意义,因此我们暂停了这个想法。我们也尝试过用较小的主题进行广播连接,但是双方的数据都是相当大的,并且是不断变化的(我对广播连接的理解是,您广播的数据是静态的,不会改变。。。如果我错了,请纠正我)。
尝试2:
我们想到将一个流连接到一个存储,在我们的例子中,连接到一个postgres数据库(我们称之为缓存),然后发布到我们的新主题。我们必须定期更改缓存中的数据,然后需要将其传播到输出主题。我们当前的解决方案要求我们从头开始重新启动作业并重新处理,以便发布更正。重新开始工作并不理想,而且正在成为一种负担。
我要注意的一点是,我们尝试加入的两个主题都需要启动与另一个主题的加入。
最后一个想法,我们已经有,并认为它可能会工作,是这样的:
建议尝试3:
工作 A 生成缓存。
工作 B 也会产生缓存。
工作 A 我会看着你的工作 B 的缓存,并查看是否有任何记录作为数据流加入到作业中 A .
工作 B 我会看着你的工作 A 的缓存,并查看是否有任何记录作为数据流加入到作业中 B .
两者 A 以及 B 将发布到同一主题 T . 输出 T 将存储在postgres数据库中 D (基本上是另一个缓存)。
工作 C 将通过加入 D 并将更正发布到 T .
这似乎是加入历史数据的最可靠的方法。
我的问题:
我们应该遵循什么样的设计模式来构建多个Kafka主题的聚合历史记录?e、 例如,用户 a 他在做什么 xyz 在某个时间点,他们与组织有关 b 我们是否应该将流与静态数据源(本例中的postgres表)连接起来?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题