我有两个独立的storm集群运行相同的拓扑(出于故障转移的原因)。我现在需要在任何给定的时间只从1个设置向数据源发送数据(这样我就不会在接收器中复制数据)。最好,它应该是无缝的,但我可以与最小的停机时间之间的切换。我可以使用什么同步机制来实现这一点?
6yt4nkrj1#
这是个有趣的问题。如果你只是双倍风暴群的话就很复杂了。由于许多随机因素导致计算速度不同,因此很难协调。我认为一个更实际的方法是把Flume(数据库)也翻一番。因为这样做是出于故障转移的原因,所以使用双接收器可以跳过复杂的问题。下一个问题是应用程序应该从哪个数据库读取。这取决于您的场景,您的应用程序可能需要添加一些功能。假设我们有一个屏幕应用程序,只报告一个卖家的gmv。我们有一个指向其中一个数据库的dns路由器。如果由于数据倾斜而导致失败或计算缓慢,您只需将您的dns记录重定向到另一个数据库即可。那很简单。也可能会引起一些小问题。由于数据消耗速度不同,gmv可能会突然下降(因为另一个集群没有像另一个集群那样计算那么多数据)。如果屏幕向公众展示,这是一个大问题。所以你的应用程序需要检测到gmv大于之前的值(不要让这个数字下降)。
1条答案
按热度按时间6yt4nkrj1#
这是个有趣的问题。
如果你只是双倍风暴群的话就很复杂了。由于许多随机因素导致计算速度不同,因此很难协调。
我认为一个更实际的方法是把Flume(数据库)也翻一番。因为这样做是出于故障转移的原因,所以使用双接收器可以跳过复杂的问题。下一个问题是应用程序应该从哪个数据库读取。这取决于您的场景,您的应用程序可能需要添加一些功能。
假设我们有一个屏幕应用程序,只报告一个卖家的gmv。我们有一个指向其中一个数据库的dns路由器。如果由于数据倾斜而导致失败或计算缓慢,您只需将您的dns记录重定向到另一个数据库即可。那很简单。也可能会引起一些小问题。由于数据消耗速度不同,gmv可能会突然下降(因为另一个集群没有像另一个集群那样计算那么多数据)。如果屏幕向公众展示,这是一个大问题。所以你的应用程序需要检测到gmv大于之前的值(不要让这个数字下降)。