[英]Nodejs Kafka consumer with pm2 cluster
我已经实现了Kafka消费者应用程序,我只是想知道是否以pm2集群模式运行此应用程序,所有内核会消耗相同的消息还是不同的消息? 有什么办法可以验证吗? 在集群模式下运行此应用程序是否理想? 之所以我在集群模式下运行它,是因为我们的kafka会产生大量消息。
同样目前,如果我在pm2集群模式下运行此程序,那么我们所有的内核都将达到CPU使用率的100%。 是否应该这样发生?
仅供参考:我正在使用https://www.npmjs.com/package/no-kafka
所有内核将消耗相同的消息还是不同的消息? 有什么办法可以验证吗?
这取决于您的主题配置+使用者配置。 让我们举个例子。
同样目前,如果我在pm2集群模式下运行此程序,那么我们所有的内核都将达到CPU使用率的100%。 是否应该这样发生?
我对no-kafka以及消息的处理方式不是很熟悉。
但是请检查在获取下一批消息之前,库是否等待提交发生。
如果没有,您的进程可能会为消息创建过多的处理程序。
基于PM2的群集仅对网络服务器有用,因为群集的进程共享传入的网络端口并分发请求。
在您的情况下,数据源是消息订阅,必须手动将其分发给集群的工作进程。
因此,为了安全起见,主进程应与数据源进行交互,并将消息均匀地分发给工作进程,因此从外部看,它似乎是一个使用者,但仍可以在所有CPU内核上处理消息。
下面的示例演示了不依赖于基于PM2的群集的这种设置:
const cluster = require('cluster');
const _ = require('lodash');
const os = require('os');
// dispatch index
let dispatchIndex = 0;
/**
* Dispatches data to workers in a cyclic fashion
* @param {*} data - data to process
*/
function dispatch(data) {
// ensure master
if (!cluster.isMaster) {
throw new Error('Only master can dispatch');
}
// get worker ids, sorted
const workersIds = _.sortBy(_.keys(cluster.workers), _.identity);
// ensure at least one worker is available
if (workersIds.length < 1) {
throw new Error('No worker process alive');
}
// select next worker
dispatchIndex = dispatchIndex >= workersIds.length ? 0 : dispatchIndex;
const worker = cluster.workers[workersIds[dispatchIndex]];
dispatchIndex++;
// send data to worker
worker.send(data);
}
// Main Script
if (cluster.isMaster) {
// Setup master process
console.info(`Master ${process.pid} started.`);
// fork worker processes to match available CPUs
const numCpu = os.cpus().length;
for (let i = 0; i < numCpu; i++) {
cluster.fork();
}
// *** Get/Subscribe data from external source and dispatch to workers ***
setInterval(() => dispatch({ a: 'value' }), 1000);
} else if (cluster.isWorker) {
// Setup worker process
console.info(`Worker ${process.pid} started.`);
// *** handle dispatched data ***
process.on('message', (data) => {
console.info(`Data processed by ${process.pid}`);
});
}
阅读集群模块文档也很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.