我们有一个简单的火花流应用程序,从kafka通过spark流式传输事件并将其持久化为redis。
最初我们使用Receiver-based Approach,它将批次复制到HDFS并在之后开始处理。这种方法并不像我们所说的那样稳定(我们的hadoop机器上有很多流量)所以我们切换到了火花流中的Direct Approach (No Receivers)。
令我困惑的是文档中提到的 auto.offset.reset 参数。当一个工作失败或者火花管理员失败时,我们会看到流媒体工作通过处理大量事件然后稳定加班来赶上。
使用第二种方法我们不再看到这种行为,我们不确定火花流是否真的赶上或只是从 auto.offset.reset latest
开始。
latest
是否是故障转移的合理默认值,并且在重新启动/主控失败时,流式传输作业是否真的能够正常捕获?
谢谢, 缪奇
答案 0 :(得分:2)
当Zookeeper中没有初始偏移量时,或者如果有 偏移量超出范围:
- 最小:自动将偏移重置为最小偏移量
- 最大:自动将偏移重置为最大偏移量
- 其他任何事情:向消费者抛出异常。如果将此设置为最大,则消费者可能会在数量时丢失一些消息 分区,对于它所订阅的主题,在代理上进行更改。至 在分区添加期间防止数据丢失,将auto.offset.reset设置为 最小
此选项仅在您第一次运行作业时发生 或者当某些消息过期并且消费者中的最后一个提交的偏移量不再存在时。
如果您不想丢失数据,那么最小是可取的。如果在数据到期时间内重新启动作业,则此选项不会影响故障转移/重新启动