用Spark与MySQL实现富集是坏主意?

问题描述 投票:-1回答:1

我是想建立一个巨大的模式,让数据用户查询起来更方便,为了实现这个目标,流媒体事件必须与 User MetadataUSER_ID and ID. 在数据工程中,这个操作叫做 "数据丰富 "吧,下面的表格就是例子。

# `Event` (Stream)

+---------+--------------+---------------------+
| UERR_ID |    EVENT     |      TIMESTAMP      |
+---------+--------------+---------------------+
|       1 | page_view    | 2020-04-10T12:00:11 |
|       2 | button_click | 2020-04-10T12:01:23 |
|       3 | page_view    | 2020-04-10T12:01:44 |
+---------+--------------+---------------------+


# `User Metadata` (Static)

+----+-------+--------+
| ID | NAME  | GENDER |
+----+-------+--------+
|  1 | Matt  | MALE   |
|  2 | John  | MALE   |
|  3 | Alice | FEMALE |
+----+-------+--------+



==> # Result

+---------+--------------+---------------------+-------+--------+
| UERR_ID |    EVENT     |      TIMESTAMP      | NAME  | GENDER |
+---------+--------------+---------------------+-------+--------+
|       1 | page_view    | 2020-04-10T12:00:11 | Matt  | MALE   |
|       2 | button_click | 2020-04-10T12:01:23 | John  | MALE   |
|       3 | page_view    | 2020-04-10T12:01:44 | Alice | FEMALE |
+---------+--------------+---------------------+-------+--------+

我是用Spark开发的,而且 User Metadata 是存储在MySQL中的,然后我意识到,如果spark代码包括与MySQL表的连接,这将是浪费Spark的并行性,对不对?

我想,如果流量增加的话,MySQL上会出现瓶颈。

我是否应该将这些表存储到 key-value store 并定期更新?

你能给我一些解决这个问题的思路吗?你们平时是如何处理这类操作的?

mysql database apache-spark
1个回答
0
投票

解决方案1 :

按照你的建议,你可以在你的本地保存一个key-value对的本地缓存副本,并定期更新缓存。

解决方案2:你可以使用MySql来实现。

你可以使用MySql to Kafka Connector,如下图。https:/debezium.iodocumentationreference1.1connectorsmysql.html。对于用户元数据表上的每一个DML或表的改变操作,都会有一个各自的事件被发射到一个Kafka主题(例如db_events)。你可以在你的Spark流式作业中并行运行一个线程,该线程会轮询db_events并更新你的本地缓存键值。这个解决方案将使你的应用成为真正意义上的近乎实时的应用.我可以看到的一个问题是,将需要运行一个带有Mysql Connector(即Debezium)的Kafka Connect服务作为插件。

热门问题
推荐问题
最新问题