Kafka 喜欢 Kinesis Stream 上的偏移量吗?

Kafka like offset on Kinesis Stream?

我过去曾使用过 Kafka,最近需要在 AWS Kinesis Stream 上移植部分数据管道。现在我读到 Kinesis 实际上是 Kafka 的一个分支并且有很多相似之处。

但是我没有看到我们如何让多个消费者从同一个流中读取数据,每个消费者都有相应的偏移量。每个数据记录都有一个序列号,但我找不到任何特定于消费者的信息(Kafka 组 ID?)。

是否真的可以让不同的消费者在同一个 AWS Kinesis Stream 上具有不同的摄取率?

是的。

您可以拥有多个 Kinesis 消费者应用程序。假设你有 2.

  1. 第一个消费者应用程序(我认为它是 Kafka 中的 "consumer group"?)可以是 "first-app" 并将其位置存储在 DynamoDB "first-app-table" 中。它可以拥有任意数量的节点(ec2 实例)。
  2. 第二个消费者应用程序也可以在同一个流上工作,并将其位置存储在另一个 DynamoDB table 让我们说 "second-app-table"。

每个 table 将包含 "what is the last processed position on shard X for app Y" 信息。因此,这两个应用程序将相同分片的检查点存储在不同的位置,这使它们相互独立。

关于摄取率,在使用 KCL 的消费者应用程序中有一个“idleTimeBetweenReadsInMillis”值,即 Amazon Kinesis API 获取操作的轮询间隔。例如第一个应用程序可以有“2000”的轮询间隔,所以它会每 2 秒轮询一次流的分片,看看是否有新记录到来。

我不太了解卡夫卡,但据我所知; Kafka "partition" 在 Kinesis 中是 "shard",同样 Kafka "offset" 是存储序列的“sequence number" in Kinesis. Kinesis Consumer Library uses the term "checkpoint”。就像你说的,概念是相似的。