在不同区域的EventHub之间移动数据

时间:2017-10-17 09:45:28

标签: azure azure-eventhub

我有很多不同地区的网络应用程序。每个应用程序都将数据放入区域本地事件中心。在此之后,我想收集中央事件中心的所有数据,以便我可以在一个地方处理所有数据。将数据从一个事件中心移动到另一个事件中心的最佳方法是什么?不同的区域每秒需要输入1000条消息才能进入集线器。

我尝试过的想法:

  1. 让webapp直接写入中央事件中心。缺点是区域之间的连接可能很糟糕。每天我都会在东南亚和北欧之间获得很多超时。
  2. 使用流分析作业从一个转移到另一个。这似乎工作正常,除了它在高负载下不是100%可靠。我的工作没有任何理由停止,必须手动重启(停机15分钟后)再次工作。

1 个答案:

答案 0 :(得分:1)

虽然我的第一个答案就是尝试上面的#2,但它并不适合你(无论出于何种原因,我自己都没有尝试过Stream Analytics),你几乎知道你拥有什么要做的事情:将数据从一个事件中心复制到另一个事件中心。

因此编写一个EventHub使用者,它将消息从一个EventHub复制到另一个可能将其包装在信封中,如果你需要携带一些元数据(例如排队时间)。如果您的目标事件中心发生故障,请继续重试并且不会提交进度,直到您成功发送消息为止(因为除非您解析身体,否则您不应该有毒药消息)。无论您使用哪种解决方案,您都会在中央eventhub中收到重复的消息,以便通过在有效负载中包含唯一ID或设计问题来为此做出规划。

显然,确保中央事件中心有足够的分区来处理来自所有其他分区的负载,并且您肯定需要本地分区,因为1000 /秒是每个分区的写入限制。

您仍然可以选择是在本地还是集中放置复印机,我的倾向是本地的,但您可以使用相同的代码对它进行双向测试(尽管您的提交/偏移跟踪器可能应该在与复印机运行的地方相同。)

所以是的东西可以下来,只要确保再次启动它,最好是自动启动它(并监控你的复制过程有多远)。如果Stream Analytics足够可靠地完成它,那就太棒了,但是唉。

您还可以选择如何为复印机工作人员分配分区。如果保证工作人员能够快速重新启动(即处于可保持X存活的托管事物),则常量分配不是错误的选择。分区的自动分配似乎有可能导致分区在重新平衡之前被短暂遗忘,但只是选择了你的毒药。