【问题标题】:Does Kinesis guarantee delivery?Kinesis 是否保证交货?
【发布时间】:2021-01-08 14:25:16
【问题描述】:

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

这样的明确声明

Kinesis 保证至少一次交货

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

Kinesis 是否有提交消息保证? Kinesis 是否有处理保证(仅在处理并确认已处理后将消息标记为只读)

【问题讨论】:

  • 如果您追求 Kafka 功能,为什么不使用 AWS MSK?
  • 我更喜欢尽可能接近无服务器。我知道 MSK 解决了 Zookeeper 和 Kafka 的痛点,但我希望 Kafka 提供更无缝的东西。
  • 我认为这里有些混乱。 Kinesis 不是发布/订阅类型系统。在 AWS 中,这是由 SNS 提供的。因此,消费者没有任何处理或正在读取消息的确认。
  • 知道了。因此,它更像是将消息存储在 kinesis 节点上。然后,一旦您启动了消费者,消费者将阅读它请求的所有消息,消费者有责任跟踪它处理或未处理的消息。
  • 是的。更重要的是,您无法从 kinesis 中删除消息。它们会一直留在那里直到过期,因此可以随时被许多消费者多次阅读。

标签: amazon-web-services messaging amazon-kinesis


【解决方案1】:

基于 Kinesis 的文档使用者从 Stream 中读取整个数据。 因此,消费者有责任提交他们的历史并从他们离开的地方拾起。 https://docs.aws.amazon.com/streams/latest/dev/building-consumers.html

【讨论】:

    【解决方案2】:

    从 cmets 来看,如果您真的追求无服务器方法,为什么不使用 Lambda Event source mapping 来消费 Kinesis 消息?

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

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

    【讨论】:

      猜你喜欢
      • 2020-05-25
      • 2014-09-03
      • 1970-01-01
      • 2017-01-07
      • 1970-01-01
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多