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

nkkqxpd9  于 2021-06-07  发布在  Kafka
关注(0)|答案(4)|浏览(334)

我正在使用kafka节点链接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主题。

x6yk4ghg

x6yk4ghg1#

我不太确定,但我想根据你的要求,代码已经更新了here:- https用法://github.com/sohu co/kafka node#createTopicsTopicsCB,添加参数“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]
    }
  ]
dgiusagp

dgiusagp2#

这个 Producer.createTopics 需要一个 partitons 选项。看到了吗https://www.npmjs.com/package/kafka-node#createtopicstopics-断路器
传递对象,而不是字符串

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

变成

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

8tntrjer3#

如文档所述,此方法仅在 auto.create.topics.enable 设置为 true :
此方法用于在kafka服务器上创建主题。仅当kafka服务器上的auto.create.topics.enable设置为true时,它才起作用。我们的客户端只需向服务器发送一个元数据请求,服务器就会自动创建主题。当async设置为false时,此方法在创建所有主题之前不会返回,否则会立即返回。
这意味着对未知主题的任何操作都将导致使用默认的分区数创建它 num.partitions 参数。
我不确定,但也许 node-rdkafka 实现可以允许您调用相应的 librdkafka 创建主题的方法?

k10s72fa

k10s72fa4#

从node.js应用程序执行shell脚本$kafka\u home/bin/kafka-topics.sh-create-topic topicname-partitions 8-replication factor 1-zookeeperlocalhost:2181
其中$kafka\u home是您安装kafka的位置

相关问题