Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
Apache kafka 简单的卡夫卡消费者信息传递复制_Apache Kafka - Fatal编程技术网

Apache kafka 简单的卡夫卡消费者信息传递复制

Apache kafka 简单的卡夫卡消费者信息传递复制,apache-kafka,Apache Kafka,我试图用Java实现一个简单的生产者-->卡夫卡-->消费者应用程序。我能够成功地生成和使用消息,但是当我重新启动消费者时,问题就出现了,其中一些已经使用的消息再次被消费者从Kafka获取(不是所有消息,而是最后使用的一些消息) 我已在消费者中设置了autooffset.reset=maximum,并且我的autocommit.interval.ms属性设置为1000毫秒 这是一个已知的问题,还是我在这里遗漏了其他设置 基本上,是否有一种方法可以确保消费者不会拾取/消费以前消费的消息?卡夫卡使用

我试图用Java实现一个简单的生产者-->卡夫卡-->消费者应用程序。我能够成功地生成和使用消息,但是当我重新启动消费者时,问题就出现了,其中一些已经使用的消息再次被消费者从Kafka获取(不是所有消息,而是最后使用的一些消息)

我已在消费者中设置了
autooffset.reset=maximum
,并且我的
autocommit.interval.ms
属性设置为1000毫秒

这是一个已知的问题,还是我在这里遗漏了其他设置


基本上,是否有一种方法可以确保消费者不会拾取/消费以前消费的消息?

卡夫卡使用Zookeeper存储消费者偏移量。由于Zookeeper操作非常慢,所以不建议在每次消息使用后提交偏移量


可以向使用者添加关机钩子,该使用者将在退出前手动提交主题偏移量。但是,这在某些情况下(如jvm崩溃或
kill-9
)没有帮助。为了防止出现这种情况,我建议实现自定义的提交逻辑,在处理每条消息(文件或本地数据库)后在本地提交偏移量,并且每1000毫秒将偏移量提交给Zookeeper。在使用者启动时,应查询这两个位置,并且最多应使用两个值作为消耗偏移量。

这听起来可能很愚蠢,但如果我们说实现自定义提交逻辑,那么是否可以管理每条消息的偏移量。例如,如果我有两条带有时间戳值的消息,那么我想根据时间戳设置偏移量。因此,如果第二条记录具有较早的时间戳,则分配给它的偏移量应小于另一条记录。因此,在消费时,我将收到已排序的消息。