Kinesis如何实现Kafka风格的Consumer Groups?

How does Kinesis achieve Kafka style Consumer Groups?

在 Kafka 中,我可以将主题拆分为多个分区。在 Kafka 中,我不能拥有比分区更多的消费者,因为分区被用作扩展主题的一种方式。如果我有更多的负载,我可以增加分区的数量,这将允许我增加消费者的数量,这将允许我有更多的线程/进程处理给定的主题。

在Kafka中,有一个Consumer Group的概念。如果我们在一个主题上有 10 个消费者组,每个消费者组将有机会处理一个主题中的每条消息。消费者组仍然利用分区的可扩展性(即每个消费者组最多可以有 'n' 个消费者,其中 'n' 是一个主题的分区数)。这就是kafka的美妙之处,可扩展性和多通道阅读是两个独立的概念,有两个独立的旋钮可以转动。

在 Kinesis 中,我们被告知,如果您使用 Kinesis Library Client,您可以通过定义不同的 Kinesis 应用程序来获得与消费者组相同的功能。换句话说,我们可以让不同的 Kinesis 应用程序独立地流式传输来自同一流和不同时间的所有记录。

我们还被告知 "Amazon Kinesis Client Library (KCL) automatically creates an Amazon DynamoDB table for each Amazon Kinesis Application to track and maintain state information such as resharding events and sequence number checkpoints."

好的,所以我准备开始通读 KCL 代码 here,但我希望有人能回答这些问题以节省我一些时间。

  1. KCL 实际上是如何做到这一点的?
  2. 是否有解释该过程的图表?
  3. 如果我在一条记录已被所有先前的 Kinesis 应用程序生成和使用后启动了一个新的 Kinesis 应用程序 (MyKinesisApp1),新的 Kinesis 应用程序 (MyKinesisApp1) 是否仍有机会使用该记录?换句话说,Kinesis 是在处理完记录后将其从其流中删除,还是无论如何都将其保留在那里 7 天?

我看过这个问题 但它没有回答我的问题。特别是我的第三个问题!此外,这个问题对两种类似技术进行了直接比较。它将帮助了解 Kafka 的人更快地学习 Kinesis。

  1. KCL配置中有一段"appName"对应"Application Name",与Kafka中的"consumer group"相同。对于每个消费者组(即 Kinesis Streams 消费者应用程序),都有一个 DynamoDB table。您可以在此处查看示例 DynamoDB(KCL appName 是 'quickstats-development'):

  2. 没有,据我所知,没有。 "Kinesis Streams" 类似于Kafka,但除此之外,图形表示不多。

  3. 是的。每个 Kafka 消费者组在 Kinesis 中表示为不同的 DynamoDB table。这样,不同的 Kinesis 消费者应用程序可以独立使用相同的记录。 Kinesis中的checkpoint就是Kafka的Offset值。而 DynamoDB 中的检查点是 Kinesis 分片中读取点的游标。阅读类似示例的答案: