Kinesis 是否保证交付?

Does Kinesis guarantee delivery?

我正在搜索 Kinesis Data Streams 的文档,但找不到像

这样的明确说明

Kinesis guarantees at least once delivery

从生产者方面我希望发送的消息传播到多个节点(类似于 Kafka 的 ack=all) 从消费者方面来看,我期望在消费者成功处理时等同于 Kafka 提交偏移量,或者类似于 Google Cloud 的 Pub/Sub 消息确认。

Kinesis 有提交消息保证吗? Kinesis 是否有处理保证(如果已处理并确认已处理,则将消息标记为只读)

根据来自 Kinesis 的文档消费者从 Stream 中读取全部数据。 因此,消费者有责任提交他们的历史记录并从他们离开的地方继续。 https://docs.aws.amazon.com/streams/latest/dev/building-consumers.html

根据评论,如果您真的采用无服务器方法,为什么不使用 Lambda Event source mapping 来使用 Kinesis 消息?

  • Lambda/AWS 将轮询消息,对它们进行批处理并调用我们的 lambda 函数获取一批记录(批大小小至 1)。
  • 如果 Lambda 函数 returns 成功,将提交批处理并为下一批调用函数。
  • 如果 Lambda 函数 returns 失败,批处理可以退出。
  • 与我们需要使用另一个 kafka 主题或数据库单独处理重试异常以保持消费者前进的 Kafka 消费者不同,AWS Lambda 也支持异步退出。

对于简单的用例,Kinesis + Lambda 与 Kafka + Consumer 一样好。