如何在nodejs中创建带分区的kafka主题?

时间:2017-11-06 14:47:41

标签: node.js apache-kafka

我正在使用kafka-node link api来创建kafka主题。我没有找到如何使用分区创建kafka主题。

var kafka = require('kafka-node'),
    Producer = kafka.Producer,
    client = new kafka.Client(),
    producer = new Producer(client);
// Create topics sync
producer.createTopics(['t','t1'], false, function (err, data) {
    console.log(data);
});
// Create topics async
producer.createTopics(['t'], true, function (err, data) {});

producer.createTopics(['t'], function (err, data) {});// Simply omit 2nd arg

如何使用nodejs中的分区创建kafka主题。

4 个答案:

答案 0 :(得分:2)

从您的node.js应用程序执行shell脚本$ KAFKA_HOME / bin / kafka-topics.sh -create -t​​opic topicname -partitions 8 -replication-factor 1 -zookeeper localhost:2181

其中$ KAFKA_HOME是您安装Kafka的位置

答案 1 :(得分:1)

正如文档所述,此方法仅在auto.create.topics.enable设置为true时才有效:

  

此方法用于在Kafka服务器上创建主题。它仅在Kafka服务器上的auto.create.topics.enable设置为true时有效。我们的客户只需向服务器发送元数据请求即可自动创建主题。当async设置为false时,此方法在创建所有主题之前不会返回,否则会立即返回。

这意味着对未知主题的任何操作都将导致使用num.partitions参数配置的默认分区数创建。

我不确定,但也许其中一个node-rdkafka实现可以让您调用相应的librdkafka方法来创建主题?

答案 2 :(得分:0)

我不确定,但是我认为根据您的要求,代码已在此处更新:-https://github.com/SOHU-Co/kafka-node#createtopicstopics-cb,并添加了参数“ replicaAssignment”。

  // Optional explicit partition / replica assignment
  // When this property exists, partitions and replicationFactor properties are ignored
  replicaAssignment: [
    {
      partition: 0,
      replicas: [3, 4]
    },
    {
      partition: 1,
      replicas: [2, 1]
    }
  ]

答案 3 :(得分:-1)

Producer.createTopics具有一个partitons选项。参见https://www.npmjs.com/package/kafka-node#createtopicstopics-cb

传递对象,而不是字符串

producer.createTopics(['t', 't1'], true, function (err, data) {});

成为

producer.createTopics(
  [
    { topic: 't', paritions: 5 },
    { topic: 't1', partitions: 23 },
  ], 
  true,
  function (err, data) {}
);