【问题标题】:nodejs- kafka-node module- getting the same msg from each partitionnodejs- kafka-node 模块- 从每个分区获取相同的 msg
【发布时间】:2016-10-14 21:47:54
【问题描述】:

我正在使用节点模块“kafka-node”来创建一个kafa-consumer:

var client = new kafka.Client(ZOO_KEEPER_URL, PORTAL_CLIENT_ID);
var topics = [
      { "topic" : MY_TOPIC_NAME,
        partition: 0
      },
      { "topic" : MY_TOPIC_NAME,
        partition: 1      }
    ];
var options = {
      autoCommit: false,
      groupId: GROUP_ID,
      fromOffset : false
    };
var consumer = new Consumer(client, topics, options);
    consumer.on('message', function (message) {
       console.log("New Message; offset: "+ message.offset + " Partition:   "+message.partition);           
    });

会发生相同的偏移量从分区 0 检索一次,然后从分区 1 检索。 我所期望的是 ZooKeeper 会知道如何平衡和管理这一点。

注意: 用例是从 Kafka 读取任何可用的 msg -> 写入 Elastic Search -> 提交到 Kafka(这就是 autocommit 设置为 false 的原因)

【问题讨论】:

    标签: node.js apache-kafka apache-zookeeper


    【解决方案1】:

    每个分区都有自己的偏移量并包含不同的数据。因此,如果您收到来自分区 0 的偏移量为零的消息和来自分区 1 的偏移量为零的消息,则它是两条不同的消息。同样在提交时,所有分区的偏移量都是独立存储的。

    【讨论】:

    • 你说得对,谢谢。我现在不明白的是偏移 API - 调用时我得到的最早可用偏移之间的关系是什么 - var offset = new kafka.Offset(client); offset.fetch([{ "topic" : topicName }] 和分区管理的偏移量?
    • 如果消费者开始阅读,它有两种可能开始阅读:要么从最新提交的偏移量开始,要么从主题末尾开始。 (参见参数“auto.offset.reset”)。当然,你也可以找任何位置阅读。提交偏移量通常用于确保在客户端失败时不会丢失任何消息——即,在恢复时,客户端可以从最新提交的偏移量恢复。
    猜你喜欢
    • 1970-01-01
    • 2019-05-20
    • 2017-04-27
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 2017-07-03
    相关资源
    最近更新 更多