问题描述
我目前正在尝试使用 Azure Databricks 上的 Delta Lake 处理每天大约 4TB 的遥测数据。
我有一个专用的事件中心集群,事件被写入其中,我正在尝试使用数据块结构化流将这个 eventhub 摄取到 delta 湖中。有一个相对简单的工作,它获取事件中心输出并提取几列,然后使用流写入器写入 ADLS gen2 存储,该存储安装到按日期和小时分区的 DBFS。
最初在一个干净的增量表目录上,性能跟上事件中心每秒写入大约 18k 条记录的速度,但几个小时后,它下降到每秒 10k 条,然后进一步下降,直到它似乎稳定在每秒 3k 条记录左右。
在具有不同分区方案的 databricks 方面尝试了一些事情,白天分区似乎在最长的时间内表现最好,但在这种情况下暂停并重新启动后,性能下降并开始落后于事件中心.
寻求一些关于我如何能够保持性能的建议。
解决方法
我曾经遇到过类似的问题,不是 Delta 湖,而是 Spark Azure EventHubs 连接器。它非常缓慢并且消耗了大量资源。
我通过切换到 Azure EventHubs 的 Kafka 接口解决了这个问题:https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-for-kafka-ecosystem-overview
设置起来有点棘手,但几个月来一直运行良好。