应用程序状态、错误处理和容错?

qyswt5oh  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(384)

我正在开发我的第一个apachebeam管道来处理来自aws kinesis的数据流。我熟悉kafka关于如何处理消费者的偏移量/状态的概念,并且有实现apachestorm/spark处理的经验。
阅读完文档后,我成功地创建了一个工作beam管道,使用kinesio javasdk侦听aws kinesis数据流来转换和打印消息。但是,我想知道在apachebeam w.r.t.kinesio中如何处理以下区域的任何参考实现或指针-
如何在kinesis streams中唯一地标识使用者应用程序(类似于kafka中的使用者组id)——我说它基于apachebeam的应用程序名,并且任何使用kcl的使用者都在dynamodb中跟踪其状态,这是对的吗;Apache·比姆·凯西奥也是这样吗?
如何强制使用者开始处理数据流w.r.t.它的碎片从先前停止的位置开始,即在使用者重新启动或处理过程中出现任何错误异常的情况下(类似于偏移管理w.r.t.kakfa中的每个使用者groupid)。initialpositioninstream.trim\u horizon总是从最早的可用数据流开始,即使我在处理了来自kinesis流的少量数据之后重新启动管道。
ack如何在kinesis数据流中工作,即消费者如何在进一步增加碎片中的序列/位置之前,确认/更新使用getrecords()提取的数据流所处理的检查点?是否有任何方法可以控制使用者应用程序中的这些行为,即何时成功确认消息以保存应用程序状态,以及在使用者重新启动时从这些位置开始?
处理数据流时业务异常(在管道中的任何阶段)对从kinesis流提取的后续数据的影响,即应用程序是否继续提取数据或停止进程。

mrfwxfqh

mrfwxfqh1#

KinesisIO.Read 在引擎盖下使用aws-sdk读取kinesis,并定期检索shard iterator的更新,从kinesis shard获取记录。
你试过了吗 ShardIteratorType#LATEST 为了这个?
请看我的答案:https://stackoverflow.com/a/62349838/10687325
如果是未知异常,那么管道将停止。

相关问题