[英]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.