结构化流+ kafka集成

时间:2020-06-28 11:28:06

标签: apache-spark pyspark apache-kafka spark-streaming spark-structured-streaming

我正在尝试通过Kafka使用结构化流来读取和写入消息。如果我使用结构化流,spark将偏移量存储到检查点目录。 ?

  1. 如果我想使用使用者组来处理某个主题的Kafka消息,它将如何工作?在这里,我们不会将偏移量提交给Kafka,如果丢失检查点目录,它将如何容错?
  2. 应如何设置检查点?可以将同一检查点目录用于多个作业或多个使用者吗?
  3. 如果我将startingOffsets配置为最早,那么每次重新启动作业都会从头开始读取,因为我们没有将偏移量提交给Kafka吗?

1 个答案:

答案 0 :(得分:-1)

  1. 默认情况下,结构化流式传输会生成一个唯一的组ID,以从kafka读取数据,以确保没有其他使用者通过该组ID读取数据。 (可选)您可以将kafka组ID设置为从kafka读取数据,但必须确保没有其他使用者使用该组ID,否则您的工作可能只能读取部分数据。使用hdfs作为检查点dir和hdfs复制因子的结构化流确保即使一个节点出现故障,数据也将被复制到其他节点,并且使检查点具有容错能力。

  2. 在写入任何接收器时必须提供检查点位置,并且spark会保持在该触发器上处理的偏移范围。如果您要为多个作业提供相同的检查点位置,那么从同一主题进行消费将很成问题。

  3. 通过最早配置startingOffset,总是每次都从起点开始。在哪里提交偏移量都没有关系。