设计从外部源获取数据并发送到同一目的地的 k8s 应用程序

Design k8s app which get data from external source and send to same destination

我有一个从第三方数据源获取数据的应用程序,它会自动将数据发送到我的应用程序并且我无法过滤它,我只能接收所有数据。当数据到达时,我的应用程序会将此数据传输到 rocketmq 主题。

现在我必须让这个应用程序成为一个容器,并将其部署在具有 3 个副本的 k8s 部署中。但是这些 pods 都将获得相同的数据并发送到相同的 rocketmq 主题。

如何在不向同一 rocketmq 主题发送重复消息的情况下使此应用程序水平扩展?

Now I have to make this app a container and deploy it in k8s deployment with 3 replica. But these pods will all get same data and send to the same rocketmq topic.

There is no request. My app connect to a server and it will send data to app by TCP. Every Pod will connect to that server.

如果您想对多个实例执行此操作,它们需要以某种方式进行协调。

Leader Election pattern 是 运行 多个实例的一种方式,但只有一个可以处于活动状态(例如,当您从同一个队列读取时)。这是一种协调模式——当时只有一个实例处于活动状态。因此,此模式仅使用您的副本以获得 更高的可用性

如果您希望所有副本都积极工作,这可以通过 . This is also how e.g. Kafka(例如类似于队列)这样的技术来实现,使队列中的并发工作

还有其他方法可以解决这个问题,例如实现某种形式的锁来协调 - 但像 Kafka 中那样的分区或分片可能是最“云原生”的解决方案。