【发布时间】:2021-03-05 22:44:31
【问题描述】:
说明:
我有一个使用主题的 Kafka Stream 应用程序。 活动数量众多。
KafkaStream 会将这些事件作为终端操作使用,并将这些事件组合成一堆,比如 1000 个事件,然后将其写入 AWS S3。
我有线程在消费来自 Kafka 主题的事件后并行写入 s3。
由于某些业务应用程序逻辑和处理,不使用 kafka-connector-s3。
问题 ::
我希望应用程序具有容错性,不想丢失消息。
--> 崩溃场景
假设应用程序有 10 个线程都在运行并试图将事件放入 S3,并且在这种情况下发生崩溃,因为 KafkaStream 具有 (enable.auto.commit = false),我们无法手动提交偏移量并且所有线程都消费了来自 Kafka 主题的消息。 在这种情况下,KafkaStreams 已经在读取后提交了偏移量,但它无法将事件处理到 S3。
我需要一种机制,以便我可以确定在事件成功写入 S3 文件之前的最后偏移量是多少。 在崩溃场景中,我应该如何处理这个问题以及如何管理 Kafka Streams 中的 Kafka 偏移量,因为我使用了 10 个线程。如果有些未能写入 s3 而有些则通过了怎么办。如何确保偏移量的排序成功处理到 s3?
如果我不清楚我的问题陈述,请告诉我。
谢谢!
【问题讨论】:
标签: amazon-s3 apache-kafka kafka-consumer-api apache-kafka-streams apache-kafka-connect