我们有一个简单的spark流应用程序,通过spark将kafka的事件流式传输到redis中。
最初我们使用基于接收器的方法,将批复制到hdfs中,然后开始处理。这种方法不如我们所期望的那样稳定(hadoop机器上的大量流量),所以我们在spark流中切换到直接方法(没有接收器)。
让我困惑的是文档中提到的auto.offset.reset参数。当一个作业失败或者sparkmaster宕机时,我们会看到流式作业通过处理大量事件然后稳定超时来迎头赶上。
在第二种方法中,我们再也看不到这种行为了,我们也不确定spark streaming是否真的在迎头赶上,或者只是从auto.offset.reset开始 latest
.
是 latest
一个合理的故障转移默认值,流作业在重启/主设备故障时是否真的能正确跟踪?
谢谢,木木
1条答案
按热度按时间mepcadol1#
当zookeeper中没有初始偏移或偏移超出范围时,该怎么办:
最小:自动将偏移重置为最小偏移
最大:自动将偏移量重置为最大偏移量
其他:向消费者抛出异常。如果将其设置为“最大”,则当代理上其订阅的主题的分区数更改时,使用者可能会丢失一些消息。为了防止在添加分区期间丢失数据,请将auto.offset.reset设置为最小值
仅当您第一次运行作业时,或当某些邮件过期且使用者中最后提交的偏移量不再存在时,才会发生此选项。
所以,如果您不想丢失数据,最好是最小的。如果在数据过期时间内重新启动作业,则此选项不会影响故障转移/重新启动