gpt4 book ai didi

azure - 最佳实践 : to partition eventhub data & achieve high-scale, 通过 azure eventhub 到外部存储(azure blob)的低延迟和高吞吐量

转载 作者:行者123 更新时间:2023-12-04 03:02:06 25 4
gpt4 key购买 nike

作为安全产品的一部分,我拥有大规模云服务(azure 辅助角色),它从事件中心读取事件,将它们批量处理到约 2000 个,然后存储在 blob 存储中。每个事件都有一个 MachineId(发送该事件的机器)。事件以随机顺序来自事件中心,我将它们以随机顺序存储在 Blob 存储中。吞吐量高达 125K 事件/秒,每个事件约为 2K,因此我们的流量高达 250MB/秒。我们有大约 100 万台机器...

稍后,另一个云服务下载 blob 并对事件运行一些检测逻辑。他按 MachineId 对事件进行分组,并尝试从机器时间线中了解某些内容

问题是现在来自同一台计算机的事件被填充到不同的 blob 中。如果我能够以某种方式按 MachineId 对事件进行分组,并确保机器的某个时间窗口填充到同一个 blob,这将增加我可以在云中执行的检测。

我们确实将事件写入另一个 MapReduce 系统,并且我们在那里进行许多复杂的检测,但这些检测当然具有很高的延迟。如果我可以在云端更好地对事件进行分组,我就可以实时捕获更多内容

有什么技术可以帮助我吗?

提前致谢

最佳答案

tl;博士:在原始 eventhub 和 blob 存储之间引入另一个 EventHub(它根据 MachineID 重新分区数据)是最好的方法。

一般来说,有一个 INJESTING EVENTHUB - 这只是您的监控系统的入口点。使用 EventHubClient.send(eventData_without_partitionKey) 方法发送到此 INJESTING EVENTHUB。这将允许您以非常低的延迟和高可用性进行发送 - 因为它将发送到当前负载较少且可用的分区。

 --------------                     -----------                 ----------
| | ========= | | ==== | |
| INJESTING | RE-PARTITION > | INTERIM | BLOB \ | BLOB |
| EVENTHUB | ========= | EVENTHUB | PUMP / | |
| | | | ==== ----------
-------------- -----------

最重要的是,由于以下因素,请不要直接在 Ingesting EventHub 上对数据进行分区:

  1. 高度可用的摄取管道 - 不将事件与分区关联 - 将使您的摄取管道保持高可用性。在幕后,我们将每个 EventHubs Partition 托管在 Container 上。当您在 EventData 上提供 PartitionKey 时,PartitionKey 将被哈希到特定分区。现在,Send 操作延迟将与单个Partition 的可用性相关 - Windows 操作系统升级或我们的服务升级等事件可能会影响它们。相反,如果您坚持使用 EventHubClient.send(without_PartitionKey) - 我们将尽快将 EventData 路由到可用分区 - 因此,您的摄取管道保证高度可用
  2. 灵活的数据设计 - 在分布式系统中,您经常需要根据不同的 key 重新分区数据。请务必测量您的系统中出现这种情况的概率:)。

使用临时事件中心作为数据分区的方式。即,在 RE-PARTITION 模块中 - 您只需将一个属性交换为 EventData.PARTITION_KEY 即可将原始流重播到 INTERIM EVENTHUB - 其中原本是空的。

// pseudo-code RE-PARTITION EVENTS
foreach(eventData receivedFromIngestingEventHubs)
{
var newEventData = clone(eventData);
eventHubClient.send(newEventData, eventData.Properties.get("machineId"))
}

这可以确保 - 具有特定 MachineID 的所有 EventData1 和 1 - EventHubs 分区 上可用。 您不需要创建 1M EventHubs 分区。每个分区可以容纳无限数量的PartitionKey。您可以使用 EventProcessorHost 来托管每个分区逻辑或 Azure 流分析作业

此外,这是您过滤和生成最佳流的机会 - 该流可由下游处理管道使用。

BLOB PUMP 模块(您的下游处理管道)中 - 当您使用来自特定 INTERIM EVENTHUBPartition 的事件时 - 您现在保证拥有来自特定机器ID的所有事件 - 在此分区上。根据您所需的大小聚合事件 - 2k - 基于 PartitionId (machineId) - 您不会连续拥有所有事件 - 您需要为此构建一个内存中聚合逻辑(使用 EventProcessorHostAzureStreamAnalytics Job

关于azure - 最佳实践 : to partition eventhub data & achieve high-scale, 通过 azure eventhub 到外部存储(azure blob)的低延迟和高吞吐量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48355056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com