我正在尝试使用结构化流与Kafka读写信息。如果我使用结构化流,spark会将偏移量存储到检查点目录?
如果我想使用消费者组来处理某个主题的Kafka消息,它将如何工作?在这里,我们不向kafka提交偏移量,如果我们丢失了检查点目录,它将如何容错?
检查点的位置应该如何?我可以对多个作业或多个使用者使用相同的检查点目录吗?
如果我将startingoffset配置为earlish,那么每次重新启动作业都会从头开始读取吗?因为我们没有将偏移提交给kafka?
我正在尝试使用结构化流与Kafka读写信息。如果我使用结构化流,spark会将偏移量存储到检查点目录?
如果我想使用消费者组来处理某个主题的Kafka消息,它将如何工作?在这里,我们不向kafka提交偏移量,如果我们丢失了检查点目录,它将如何容错?
检查点的位置应该如何?我可以对多个作业或多个使用者使用相同的检查点目录吗?
如果我将startingoffset配置为earlish,那么每次重新启动作业都会从头开始读取吗?因为我们没有将偏移提交给kafka?
1条答案
按热度按时间rkttyhzu1#
默认情况下,结构化流将生成唯一的组id以从kafka读取数据,从而确保没有其他使用者正在通过该组id读取数据。您也可以将kafka组id设置为从kafka读取数据,但必须确保没有其他使用者使用该组id,否则您的作业可能只能读取部分数据。使用hdfs作为检查点dir和hdfs复制因子的结构化流确保即使一个节点关闭,数据也会复制到其他节点,这使得检查点具有容错性。
在向任何接收器写入数据时,必须提供检查点位置,而spark保持在该触发器上处理的偏移范围。如果您将为多个作业提供相同的检查点位置,那么如果从同一主题消费,则会出现问题。
通过将startingoffset配置为earlish,每次都从起点开始。在哪里提交补偿并不重要。