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,我们有一个卡夫卡集群和spark流媒体消费者。目前,偏移量存储在数据存储的用户端。当我们使用的最新kafka提供了在代理级别存储消费者补偿的功能时(在kafka中的\u consumer\u offset主题上),在消费者端存储的理由是什么 一个论点是,如果卡夫卡星系团倒下,我们仍然有偏移量信息。但如果卡夫卡集群宕机,即使消息也会丢失,并且在给定的偏移量内无法重播任何消息 我错过了一些明显的东西,但我想不出来。 谢谢,正如在存储提交偏移量的方式中提到的,提交偏移量取决于可靠性要求的严格程度 根据

我们有一个卡夫卡集群和spark流媒体消费者。目前,偏移量存储在数据存储的用户端。当我们使用的最新kafka提供了在代理级别存储消费者补偿的功能时(在kafka中的
\u consumer\u offset
主题上),在消费者端存储的理由是什么

一个论点是,如果卡夫卡星系团倒下,我们仍然有偏移量信息。但如果卡夫卡集群宕机,即使消息也会丢失,并且在给定的偏移量内无法重播任何消息

我错过了一些明显的东西,但我想不出来。 谢谢,正如在存储提交偏移量的方式中提到的,提交偏移量取决于可靠性要求的严格程度

根据您使用的流式API的不同,您可能有几个选项

  • 子流
  • 第一个也是最简单的一个选项是配置外部检查点位置,用于存储数据和使用者偏移量。它允许您在出错后轻松恢复spark代码,并生成幂等输出(在将数据写入文件时非常方便)。使用数据流时,应禁用
    enable.auto.commit

    您也可以手动将偏移提交到Kafka或您的存储器(请参阅上面链接中的示例)。在这种情况下,您必须负责使输出幂等

  • 结构化流媒体

  • 在这里,除了将偏移存储在检查点目录(例如HDFS)之外,您别无选择。请参阅(Spark 2.2.x和2.3.0也是如此)。

    据我所知,您想要回答的核心问题是

    一个论点是,如果卡夫卡星系团倒下,我们还有偏移量 信息。但如果卡夫卡集群宕机,甚至消息也会丢失 对于给定的偏移量,不能重播任何消息

    通过在外部存储偏移范围,它允许Spark流媒体应用程序能够从任何时间点重新启动和重播消息,只要消息在Kafka中仍然有效。因此,在外部存储补偿的决定可能不仅仅基于恢复场景,而是基于一般场景


    Cloudera的这一点非常好

    不同的消费者可能会有不同的补偿。为什么服务器要无限期地存储所有可能客户端的偏移量?如果你想在Zookeeper中单独备份你的偏移量,你可以这样做。它存储一个
    (消费者组,主题,偏移量)
    的元组,即使spark从偏移量中重放消息,也可以从卡夫卡本身而不是外部数据存储中进行偏移。我相信卡夫卡中的消费者补偿主题就是为了这个目的。