2017-10-17 27 views
0

我在多个不同地区分布了webapps。每个应用程序都将数据放入区域本地事件中心。在此之后,我想收集中心事件中心中的所有数据,以便我可以在一个位置处理所有数据。将数据从一个事件中心转移到另一个事件中心的最佳方式是什么?不同地区每秒需要将1000条消息放入集线器。在不同地区的EventHub之间移动数据

想法,我曾尝试:

  1. 让web应用程序直接写入到中央事件枢纽。缺点是地区之间的联系可能很糟糕。我每天都会在东南亚和北欧之间得到很多超时。
  2. 使用流分析作业从一个移动到另一个。这似乎工作正常,但它不是100%可靠的高负载。我的工作无故停止,必须手动重新启动(停机15分钟后)再次工作。
+0

为什么不处理他们在自己的地区或直接发送到集中地区?这对成本是很重要的。 –

+0

我需要中心事件中心的数据将数据流式传输到位于中心区域的数据库中。所以有些东西必须将数据移到那里,问题是什么? – viblo

回答

1

虽然我的第一个答案会一直尝试你上面的#2,它不适合你(不管是什么原因,我没有尝试过流分析我自己)的工作,你很知道你有做:将数据从一个事件中心复制到另一个事件中心。

因此,编写一个EventHub使用者,将消息从一个EventHub复制到另一个EventHub,如果您需要带一些元数据(例如入队时间),可能会将其封装在信封中。如果您的目标事件中心发生故障,请继续重试,直到您成功发送消息为止(因为除非您解析身体,否则不应有毒消息)。无论您使用哪种解决方案,您都会有重复的消息到达中心的事件中心,因此通过在有效载荷内包含唯一的ID或设计其他事项来规划这一点。

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

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

所以是的东西可以下来,只要确保再次启动它,最好是自动的,当它(并放在监视你的复制过程后面多远)。如果Stream Analytics足够可靠地完成它,那很好,但可惜。

您还可以选择如何将分区分配给复印机工作人员。如果工人们保证很快再次启动(即保持X活着的管理事物),那么恒定的分配不是不好的选择。分区的自动分配似乎有可能导致在重新平衡之前短暂时间内忘记的分区,但只是选择了毒药。

+0

当你说写一个EventHub使用者时,你的意思是一个普通的App服务WebJob吗?我现在正在做一些实验,但我很难获得良好的性能写入中心位置。我尝试使用IAsyncCollector输出绑定,并且花费了20多秒来编写200条消息。 – viblo

+0

我没有使用足够的各种Azure PAAS的东西,有一个很好的想法,最终看起来像什么。当我使用事件集线器时,我一直在服务器上或者在连续处理事物的docker容器中运行C#/ .NET(或Java)。想到要检查的事情是:你是否经常犯错误,你是否在每个请求中旋转一个连接或是重复使用一次等等。基本上写它的方式与你在服务器代码中发送数据的位置相同,并集中在您的处理代码中。 (尽管如果你没有使用代码,但没有太大的帮助。) – cacsar

+0

另一个需要考虑的事情是,请拨打Azure支持以了解为什么似乎应该关闭Stream Analytics作业。 – cacsar

相关问题