spark-sql + spark-streaming 的处理问题
来源:11-2 -外部数据源接口
鲲t
2019-05-28
前提:
1. 需求: 统计实时订单量(类似)
2. 通过maxwell读取binlog数据同步到kafka
3. spark-streaming处理kafka里面的数据
4. spark-sql定义不同的实时报表
5. (公司之前没有做过流出里相关报表)
6. 报表可能会变, 同时定义报表的分析人员只会写sql, 所以只能用sql方式
请问下老师:
- 我看到网上很多案例, 同事通过binlog放到kafka里面, 然后试试计算消费, 但是同一个数据库服务器有多个库, 一个库多个表,
- 方案1: 放入到kafka的时候, 根据库或者表, 穿件不同的topic, 然后streaming计算后聚合结果,
- 方案2: 所有数据放到同一个topic, 因为每一条变动的binlog数据里面都有数据库字段, 数据表字段, 在用sql定义报表的时候 就多几个where就能达到查询效果了
问题: 我原本想到的是方案2, 但是方案2
- 是不是要一条sql 提交一个job, 然后出现所有kafka的数据都要消费一遍, 这样性能不久扛不住么?
- 或者是提交一个job, 然后试试查询某个地方是否存储了某些实时报表, 然后再次取出定义一个报表的sql进行计算呢?
- 如果是方案1, 多个topic的数据最后通过streaming最后合并是不是特别麻烦?
当然我不太懂, 可能这个问题都是错的,
课程的Spark-SQL 愿景中说明到, spark可以自动的读更少的数据, 不知道streaming是不是也是这样的呢?
2回答
-
1) maxwell采集binlog的数据,是否支持多库?这个我不太确定。 maxwell采集的时候注意数据的前后顺序哦,否则可能导致后面的数据先被sparkstreaming消费掉了
2)sql是提交一个job,但是你可以做到context共享,大家的sql都是提交到同一个共享的server上去执行,这样就省去了作业提交的申请资源的时间了
3)streaming没有很多的全部覆盖dataframe,读更少的数据这个建议用结构化流,因为结构化流底层是统一的ds/df编程
012019-05-28 -
鲲t
提问者
2019-05-28
# 以下内容为老师在群里的回复 如果有相同问题的同学可以参考
@PK哥 请问下老师, [图片]
这个意思就就是说通常做法为, 不同sql共享context对吧?
如果作业已经提交了, 这个时候又新增了报表sql, 是不是要动态读取不同的报表了? 感觉这种方式好像不太对,
如果每一个sql报表都提交一个作业, 消费同一个kafka的topic, (当然统计内容不一样, )这样会不会出现: 所有数据都要处理一遍, 导致性能下降很多的情况呢
鲲 21:59:02
稍后我把你在群里的会发复制到问答区,
PK哥 21:59:26
server共享
PK哥 21:59:33
你只要资源够
PK哥 21:59:38
提交就行
PK哥 22:00:03
增量
You recalled a message
鲲 22:10:50
[图片]
@PK哥 请问下老师, 共享server, 就是说我可以在这个箭头标记的地方, 写多个查询 且查询的sql, 我可以从之前预先写好的文件或者数据库中取出来, 这样理解对吧
PK哥 22:11:26
你理解成一个cs结构就行了
00
相似问题