我有以下数据管道:
进程将消息写入Kafka
spark结构化流应用程序正在侦听新的kafka消息,并将它们按原样写入hdfs
批处理配置单元作业每小时运行一次,从hdfs读取新摄取的消息,并通过一些中等复杂的insert-into语句填充一些表(我没有可用的物化视图)。编辑:基本上在我的配置单元作业之后,我有一个结果表1存储原始数据,然后是另一个表table2=fun1(table1),然后table3=fun2(table2),然后table4=join(table2,table3),等等。fun是一个选择或聚合。
一个tableau Jmeter 板显示了我编写的数据。
如您所见,步骤3使我的管道不是实时的。你能给我什么建议,使我的管道完全实时?编辑:我想要表1。。。表格实时更新!
2条答案
按热度按时间ekqde3dh1#
不建议使用带有Spark流的配置单元。因为spark流的目的是具有低延迟。hive引入了可能的最高延迟(olap),因为它在后端执行mr/tez作业(取决于hive.execution.engine)。
建议:使用spark流和低延迟db,比如hbase,phoenix。
解决方案:使用kafka作为源开发spark流作业,并使用自定义接收器将数据写入hbase/phoenix。
3vpjnl9f2#
引入hdfs显然不是实时的。memsql或druid/implie提供了更多来自Kafka的实时信息
您需要历史数据来执行汇总和聚合。tableau可以缓存数据集,但它本身不能持久存储。因此,您需要一些存储,并且选择使用hdfs而不是数据库。
注:hive/presto可以直接从kafka读取。所以你根本不需要Spark。
如果您想从kafka进行滚动聚合并使其可查询,可以使用ksql,或者您可以编写自己的kafka流解决方案