首页 > 解决方案 > 设计从外部源获取数据并发送到同一目的地的 k8s 应用程序

问题描述

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

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

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

标签: kuberneteskubernetes-deployment

解决方案


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

没有要求。我的应用程序连接到服务器,它将通过 TCP 向应用程序发送数据。每个 Pod 都会连接到该服务器。

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

领导者选举模式是一种运行多个实例的方法,但只有一个实例可以处于活动状态(例如,当您从同一个队列中读取时)。这是一种协调模式——当时只有一个实例处于活动状态。所以这个模式只使用你的副本以获得更高的可用性

如果您希望所有副本都积极工作,可以使用分片或分区等技术来完成。这也是例如Kafka(例如,类似于队列)从队列中进行并发工作的方式。

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


推荐阅读