我已经实现了kafka消费者应用程序,我只是想知道如果我在pm2集群模式下运行这个应用程序,所有的核心会使用相同的消息还是不同的消息?有什么办法可以证明吗?在集群模式下运行这个应用程序理想吗?我之所以在集群模式下运行它,是因为我们的kafka产生了大量的消息。
另外,目前如果我在pm2集群模式下运行,我们所有的核心都达到了100%的cpu使用率。是这样吗?
仅供参考:我正在使用https://www.npmjs.com/package/no-kafka
我已经实现了kafka消费者应用程序,我只是想知道如果我在pm2集群模式下运行这个应用程序,所有的核心会使用相同的消息还是不同的消息?有什么办法可以证明吗?在集群模式下运行这个应用程序理想吗?我之所以在集群模式下运行它,是因为我们的kafka产生了大量的消息。
另外,目前如果我在pm2集群模式下运行,我们所有的核心都达到了100%的cpu使用率。是这样吗?
仅供参考:我正在使用https://www.npmjs.com/package/no-kafka
2条答案
按热度按时间qyyhg6bp1#
基于pm2的集群只适用于网络服务器,因为集群进程共享传入的网络端口并分发请求。
在您的例子中,数据源是一个消息订阅,必须手动将其分发到集群的工作进程。
因此,为了安全起见,主进程应该与数据源进行交互,并将消息均匀地分配给工作进程,这样在外部,它看起来是一个单一的使用者,但仍然可以处理所有cpu核上的消息。
下面的例子演示了这样一种不依赖于基于pm2的聚类的设置:
阅读集群模块文档也很好。
dced5bon2#
所有内核使用相同的消息还是不同的消息?有什么办法可以证明吗?
这取决于主题配置+使用者配置。举个例子。
假设我们有一个有3个分区的主题。
现在我们开始一个消费过程,消费群体是“某个消费群体”。有关消费群的详细信息,请看这里https://www.npmjs.com/package/no-kafka#groupconsumer-新的统一消费者api。
现在您的一个消费者正在收听3个分区。
因为kafka维护每个主题的偏移量,所以每个消费者组的每个分区您的消费者将从3个不同的分区接收3条消息。因此,没有重复的信息。
现在,让我们在混合中再添加一个消费者流程。
现在,消费者组“some\u consumer\u group”的消费者1正在侦听分区0和1,而消费者组“some\u consumer\u group”的消费者2正在侦听分区2(可能也会反过来)。
最后,如果我们向组中再添加一个消费者,那么现在我们就让每个消费者听一个分区
如果这是设置,您将不会遇到重复的消息。
另外,目前如果我在pm2集群模式下运行,我们所有的核心都达到了100%的cpu使用率。是这样吗?
我不太熟悉Kafka,也不知道这些信息是如何处理的。
但是,请检查库是否在获取下一批消息之前等待提交发生。
如果没有,则可能是您的进程为消息创建了太多处理程序。