Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 卡夫卡消费者调查最新消息_C++_Apache Kafka - Fatal编程技术网

C++ 卡夫卡消费者调查最新消息

C++ 卡夫卡消费者调查最新消息,c++,apache-kafka,C++,Apache Kafka,我习惯于为卡夫卡消费者编程。我希望当我的消费者开始时,它只轮询新到达的消息(即消息在消费者开始时间之后到达),而不是在消费者偏移量处轮询消息 // Construct the configuration Configuration config = { { "metadata.broker.list", "127.0.0.1:9092" }, { "group.id", "1" }, // Disable auto commit { "enable.auto.co

我习惯于为卡夫卡消费者编程。我希望当我的消费者开始时,它只轮询新到达的消息(即消息在消费者开始时间之后到达),而不是在消费者偏移量处轮询消息

// Construct the configuration
Configuration config = {
    { "metadata.broker.list", "127.0.0.1:9092" },
    { "group.id", "1" },
    // Disable auto commit
    { "enable.auto.commit", false },
    // Set offest to latest to receive latest message when consumer start working
    { "auto.offset.reset", "latest" },
};

// Create the consumer
Consumer consumer(config);

consumer.set_assignment_callback([](TopicPartitionList& partitions) {
    cout << "Got assigned: " << partitions << endl;
});

// Print the revoked partitions on revocation
consumer.set_revocation_callback([](const TopicPartitionList& partitions) {
    cout << "Got revoked: " << partitions << endl;
});


string topic_name = "test_topic";
// Subscribe to the topic
consumer.subscribe({ topic_name });
//构造配置
配置配置={
{“metadata.broker.list”,“127.0.0.1:9092”},
{“group.id”,“1”},
//禁用自动提交
{“enable.auto.commit”,false},
//将offest设置为latest,以便在使用者开始工作时接收最新消息
{“auto.offset.reset”,“latest”},
};
//创造消费者
消费者(配置);
consumer.set_assignment_回调([](TopicPartitionList&partitions){
cout如果“enable.auto.commit”设置为false,并且您的代码中没有提交偏移量,那么每次消费者启动时,如果auto.offset.reset=earlime,它都会从主题中的第一条消息开始使用消息

auto.offset.reset的默认值为“latest”,这意味着如果缺少有效的偏移量,使用者将开始读取最新记录(在使用者开始运行后写入的记录)

根据您上面的问题,看起来auto.offset.reset=latest应该可以解决您的问题

但是,如果需要基于实时的偏移量,则需要在使用者中应用时间过滤器。这意味着从主题中获取消息,将偏移量时间与消息负载中的某个自定义字段或消息的元属性(ConsumerRecord.timestamp())进行比较,并相应地进行进一步处理

如果“enable.auto.commit”设置为false,并且您没有在代码中提交偏移量,则每次消费者启动时,如果auto.offset.reset=earlime,则从主题中的第一条消息开始使用消息

auto.offset.reset的默认值为“latest”,这意味着如果缺少有效的偏移量,使用者将开始读取最新记录(在使用者开始运行后写入的记录)

根据您上面的问题,看起来auto.offset.reset=latest应该可以解决您的问题

但是,如果需要基于实时的偏移量,则需要在使用者中应用时间过滤器。这意味着从主题中获取消息,将偏移量时间与消息负载中的某个自定义字段或消息的元属性(ConsumerRecord.timestamp())进行比较,并相应地进行进一步处理

另请参考此答案,使用seekToEnd(集合分区)方法。 查找每个给定分区的最后一个偏移量。此函数以延迟方式计算,仅在调用poll(long)时才查找所有分区中的最终偏移量。如果未提供分区,则查找当前分配的所有分区的最终偏移量。

使用seekToEnd(集合分区)方法。
查找每个给定分区的最后一个偏移量。此函数以延迟方式计算,仅在轮询(长)时查找所有分区中的最终偏移量调用。如果没有提供分区,则查找当前分配的所有分区的最终偏移量。

如果我的使用者没有提交,则无论我如何设置
auto.offset.reset
configuration?修改我的答案,使其更清楚,基本上是“latest”表示缺少有效的偏移量,使用者将开始读取最新记录(在使用者开始运行后写入的记录)。另一种选择是“最早”这意味着如果缺少有效的偏移量,使用者将从一开始就读取分区中的所有数据。非常感谢。我将尝试一些不同的方法(包括您的建议)要查看哪个工作得最好。另一个选项是在已分配分区的回调中,我可以手动将该分区中的偏移量设置为分区的末尾。如果我的使用者没有提交,则无论我如何设置
auto.offset.reset
configuration?修改我的答案,使其更清楚基本上是“latest,”表示缺少有效的偏移量,使用者将开始读取最新记录(在使用者开始运行后写入的记录)。另一种选择是“最早”这意味着如果缺少有效的偏移量,使用者将从一开始就读取分区中的所有数据。非常感谢。我将尝试一些不同的方法(包括您的建议)另一个选项是在已分配分区的回调中,我可以手动将该分区中的偏移量设置为分区的末尾。