Tous les produits
Search
Centre de documentation

ApsaraMQ for Kafka:Send and receive messages with the Node.js SDK

Dernière mise à jour :Sep 21, 2026

Utilisez la bibliothèque node-rdkafka pour connecter une application Node.js à ApsaraMQ for Kafka afin de produire et de consommer des messages.

Prérequis

Avant de commencer, vérifiez que vous disposez des éléments suivants :

  • GCC installé

  • Node.js version 4.0.0 ou ultérieure installée

  • OpenSSL installé

  • Une instance ApsaraMQ for Kafka avec un topic et un groupe de consommateurs créés

  • (SSL uniquement) Le certificat racine SSL téléchargé et enregistré sous le nom ca-cert.pem

Installer la bibliothèque C++

Le package node-rdkafka dépend de librdkafka, une bibliothèque native C++. Installez-la via le dépôt Confluent.

  1. Accédez au répertoire des dépôts yum :

       cd /etc/yum.repos.d/
  2. Créez un fichier de configuration de dépôt nommé confluent.repo avec le contenu suivant :

       [Confluent.dist]
       name=Confluent repository (dist)
       baseurl=https://packages.confluent.io/rpm/5.1/7
       gpgcheck=1
       gpgkey=https://packages.confluent.io/rpm/5.1/archive.key
       enabled=1
    
       [Confluent]
       name=Confluent repository
       baseurl=https://packages.confluent.io/rpm/5.1
       gpgcheck=1
       gpgkey=https://packages.confluent.io/rpm/5.1/archive.key
       enabled=1
  3. Installez librdkafka :

       yum install librdkafka-devel

Installer la bibliothèque Node.js

  1. Définissez les chemins d'accès aux en-têtes et bibliothèques OpenSSL pour la compilation native :

       # Replace with your actual OpenSSL paths.
       # Run `whereis openssl` to find these paths.
       export CPPFLAGS=-I/usr/local/opt/openssl/include
       export LDFLAGS=-L/usr/local/opt/openssl/lib
  2. Installez node-rdkafka :

       npm install i --unsafe-perm node-rdkafka

Configurer la connexion

Créez un fichier setting.js contenant vos paramètres de connexion. Choisissez la configuration correspondant à votre type d'endpoint.

Paramètres de connexion

Paramètre Description Où le trouver
bootstrap_servers Endpoint de votre instance ApsaraMQ for Kafka Section Endpoint Information sur la page Instance Details dans la console ApsaraMQ for Kafka
topic_name Nom du topic vers lequel produire ou depuis lequel consommer Page Topics dans la console ApsaraMQ for Kafka
consumer_id ID du groupe de consommateurs Page Groups dans la console ApsaraMQ for Kafka
sasl_plain_username Nom d'utilisateur SASL (endpoint SSL uniquement) Champ Username dans la section Configuration Information sur la page Instance Details
sasl_plain_password Mot de passe SASL (endpoint SSL uniquement) Champ Password dans la section Configuration Information sur la page Instance Details
Si la liste de contrôle d'accès (ACL) n'est pas activée sur votre instance, récupérez le nom d'utilisateur et le mot de passe Simple Authentication and Security Layer (SASL) dans les champs Username et Password de la section Configuration Information sur la page Instance Details dans la console ApsaraMQ for Kafka . Si l'ACL est activée, assurez-vous que l'utilisateur SASL est autorisé à produire et consommer des messages. Pour plus de détails, consultez la rubrique Grant permissions to SASL users .

Endpoint par défaut

module.exports = {
    'bootstrap_servers': ["<bootstrap-servers>"],
    'topic_name': '<topic-name>',
    'consumer_id': '<consumer-group-id>'
}

Endpoint SSL

module.exports = {
    'sasl_plain_username': '<sasl-username>',
    'sasl_plain_password': '<sasl-password>',
    'bootstrap_servers': ["<bootstrap-servers>"],
    'topic_name': '<topic-name>',
    'consumer_id': '<consumer-group-id>'
}

Après avoir configuré setting.js, téléchargez-le ainsi que tous les fichiers du dossier de démonstration correspondant sur votre serveur. Si vous utilisez l'endpoint SSL, incluez le fichier de certificat racine SSL (ca-cert.pem) dans le même répertoire.

Conseil : Téléchargez le projet de démonstration complet depuis le dépôt aliware-kafka-demos . Les exemples Node.js se trouvent dans le dossier kafka-nodejs-demo , organisés par type d'endpoint.

Produire des messages

Enregistrez le code suivant sous le nom producer.js. Cet exemple envoie un message chaque seconde et journalise les rapports de livraison.

Exécutez le producteur :

node producer.js

Endpoint par défaut

const Kafka = require('node-rdkafka');
const config = require('./setting');

console.log("features:" + Kafka.features);
console.log(Kafka.librdkafkaVersion);

var producer = new Kafka.Producer({
    /*'debug': 'all', */
    'api.version.request': 'true',   // Negotiate API version with the broker automatically
    'bootstrap.servers': config['bootstrap_servers'],
    'dr_cb': true,                   // Enable delivery report callback
    'dr_msg_cb': true                // Include message payload in delivery reports
});

var connected = false

producer.setPollInterval(100);       // Poll for delivery reports every 100 ms

producer.connect();

producer.on('ready', function() {
  connected = true
  console.log("connect ok")
});

producer.on("disconnected", function() {
  connected = false;
  producer.connect();
})

producer.on('event.log', function(event) {
      console.log("event.log", event);
});

producer.on("error", function(error) {
    console.log("error:" + error);
});

function produce() {
  try {
    producer.produce(
      config['topic_name'],
      null,                          // Partition (null = auto-assign)
      new Buffer('Hello Ali Kafka'), // Message payload
      null,                          // Message key
      Date.now()                     // Timestamp
    );
  } catch (err) {
    console.error('A problem occurred when sending our message');
    console.error(err);
  }

}

producer.on('delivery-report', function(err, report) {
    console.log("delivery-report: producer ok");
});

producer.on('event.error', function(err) {
    console.error('event.error:' + err);
})

setInterval(produce, 1000, "Interval");

Endpoint SSL

const Kafka = require('node-rdkafka');
const config = require('./setting');

console.log("features:" + Kafka.features);
console.log(Kafka.librdkafkaVersion);

var producer = new Kafka.Producer({
    /*'debug': 'all', */
    'api.version.request': 'true',
    'bootstrap.servers': config['bootstrap_servers'],
    'dr_cb': true,
    'dr_msg_cb': true,

    // SASL/SSL authentication
    'security.protocol': 'sasl_ssl',
    'ssl.ca.location': './ca-cert.pem',         // Path to the SSL root certificate
    'sasl.mechanisms': 'PLAIN',
    'ssl.endpoint.identification.algorithm': 'none',  // Disable hostname verification
    'sasl.username': config['sasl_plain_username'],
    'sasl.password': config['sasl_plain_password']
});

var connected = false

producer.setPollInterval(100);

producer.connect();

producer.on('ready', function() {
  connected = true
  console.log("connect ok")

  });

function produce() {
  try {
    producer.produce(
      config['topic_name'],
      new Buffer('Hello Ali Kafka'),
      null,
      Date.now()
    );
  } catch (err) {
    console.error('A problem occurred when sending our message');
    console.error(err);
  }
}

producer.on("disconnected", function() {
  connected = false;
  producer.connect();
})

producer.on('event.log', function(event) {
      console.log("event.log", event);
});

producer.on("error", function(error) {
    console.log("error:" + error);
});

producer.on('delivery-report', function(err, report) {
    console.log("delivery-report: producer ok");
});

// Any errors we encounter, including connection errors
producer.on('event.error', function(err) {
    console.error('event.error:' + err);
})

setInterval(produce, 1000, "Interval");

Consommer des messages

Enregistrez le code suivant sous le nom consumer.js. Cet exemple s'abonne à un topic et affiche chaque message dans la console.

Exécutez le consommateur :

node consumer.js

Endpoint par défaut

const Kafka = require('node-rdkafka');
const config = require('./setting');

console.log(Kafka.features);
console.log(Kafka.librdkafkaVersion);
console.log(config)

var consumer = new Kafka.KafkaConsumer({
    /*'debug': 'all',*/
    'api.version.request': 'true',
    'bootstrap.servers': config['bootstrap_servers'],
    'group.id': config['consumer_id']
});

consumer.connect();

consumer.on('ready', function() {
  console.log("connect ok");
  consumer.subscribe([config['topic_name']]);
  consumer.consume();
})

consumer.on('data', function(data) {
  console.log(data);
});

consumer.on('event.log', function(event) {
      console.log("event.log", event);
});

consumer.on('error', function(error) {
    console.log("error:" + error);
});

consumer.on('event', function(event) {
        console.log("event:" + event);
});

Endpoint SSL

const Kafka = require('node-rdkafka');
const config = require('./setting');

console.log(Kafka.features);
console.log(Kafka.librdkafkaVersion);
console.log(config)

var consumer = new Kafka.KafkaConsumer({
    /*'debug': 'all',*/
    'api.version.request': 'true',
    'bootstrap.servers': config['bootstrap_servers'],

    // SASL/SSL authentication
    'security.protocol': 'sasl_ssl',
    'ssl.endpoint.identification.algorithm': 'none',
    'ssl.ca.location': './ca-cert.pem',
    'sasl.mechanisms': 'PLAIN',

    // Message size limits
    'message.max.bytes': 32000,
    'fetch.max.bytes': 32000,
    'fetch.message.max.bytes': 32000,
    'max.partition.fetch.bytes': 32000,

    'sasl.username': config['sasl_plain_username'],
    'sasl.password': config['sasl_plain_password'],
    'group.id': config['consumer_id']
});

consumer.connect();

consumer.on('ready', function() {
  console.log("connect ok");
  consumer.subscribe([config['topic_name']]);
  consumer.consume();
})

consumer.on('data', function(data) {
  console.log(data);
});

consumer.on('event.log', function(event) {
      console.log("event.log", event);
});

consumer.on('error', function(error) {
    console.log("error:" + error);
});

consumer.on('event', function(event) {
        console.log("event:" + event);
});