Apache kafka 为什么卡夫卡偏移量存储在应用程序的使用者端?
我们有一个卡夫卡集群和spark流媒体消费者。目前,偏移量存储在数据存储的用户端。当我们使用的最新kafka提供了在代理级别存储消费者补偿的功能时(在kafka中的Apache kafka 为什么卡夫卡偏移量存储在应用程序的使用者端?,apache-kafka,Apache Kafka,我们有一个卡夫卡集群和spark流媒体消费者。目前,偏移量存储在数据存储的用户端。当我们使用的最新kafka提供了在代理级别存储消费者补偿的功能时(在kafka中的\u consumer\u offset主题上),在消费者端存储的理由是什么 一个论点是,如果卡夫卡星系团倒下,我们仍然有偏移量信息。但如果卡夫卡集群宕机,即使消息也会丢失,并且在给定的偏移量内无法重播任何消息 我错过了一些明显的东西,但我想不出来。 谢谢,正如在存储提交偏移量的方式中提到的,提交偏移量取决于可靠性要求的严格程度 根据
\u consumer\u offset
主题上),在消费者端存储的理由是什么
一个论点是,如果卡夫卡星系团倒下,我们仍然有偏移量信息。但如果卡夫卡集群宕机,即使消息也会丢失,并且在给定的偏移量内无法重播任何消息
我错过了一些明显的东西,但我想不出来。
谢谢,正如在存储提交偏移量的方式中提到的,提交偏移量取决于可靠性要求的严格程度
根据您使用的流式API的不同,您可能有几个选项
enable.auto.commit
您也可以手动将偏移提交到Kafka或您的存储器(请参阅上面链接中的示例)。在这种情况下,您必须负责使输出幂等
在这里,除了将偏移存储在检查点目录(例如HDFS)之外,您别无选择。请参阅(Spark 2.2.x和2.3.0也是如此)。据我所知,您想要回答的核心问题是 一个论点是,如果卡夫卡星系团倒下,我们还有偏移量 信息。但如果卡夫卡集群宕机,甚至消息也会丢失 对于给定的偏移量,不能重播任何消息 通过在外部存储偏移范围,它允许Spark流媒体应用程序能够从任何时间点重新启动和重播消息,只要消息在Kafka中仍然有效。因此,在外部存储补偿的决定可能不仅仅基于恢复场景,而是基于一般场景
Cloudera的这一点非常好不同的消费者可能会有不同的补偿。为什么服务器要无限期地存储所有可能客户端的偏移量?如果你想在Zookeeper中单独备份你的偏移量,你可以这样做。它存储一个
(消费者组,主题,偏移量)
的元组,即使spark从偏移量中重放消息,也可以从卡夫卡本身而不是外部数据存储中进行偏移。我相信卡夫卡中的消费者补偿主题就是为了这个目的。