Kinesis如何实现Kafka风格的消费者组?

9
在Kafka中,我可以将我的主题分成许多分区。在Kafka中,我不能拥有比分区更多的消费者,因为分区是扩展主题的一种方式。如果我有更多的负载,我可以增加分区的数量,这将允许我增加消费者的数量,从而允许我在给定的主题上有更多的线程/进程进行处理。
在Kafka中,有一个消费者组的概念。如果我们在单个主题上有10个消费者组,则每个消费者组都有机会处理主题中的每条消息。消费者组仍然利用分区的可扩展性(即每个消费者组可以具有最多“n”个消费者,其中“n”是主题上分区的数量)。这就是kafka的美妙之处,可扩展性和多通道阅读是两个独立的概念,有两个独立的旋钮来控制。
在Kinesis中,我们被告知,如果您使用Kinesis Library Client,可以通过定义不同的Kinesis应用程序获得与消费者组相同的功能。换句话说,我们可以有不同的Kinesis应用程序独立地从同一流中以不同的时间流式传输所有记录。
我们还被告知,“Amazon Kinesis Client Library(KCL)会自动为每个Amazon Kinesis Application创建一个Amazon DynamoDB表,以跟踪和维护状态信息,例如重新分片事件和序列号检查点。”

好的,我准备开始阅读KCL代码这里,但我希望有人能回答以下问题以节省我的时间。

  1. KCL是如何实现的?
  2. 是否有图表说明该过程?
  3. 如果在所有先前的Kinesis应用程序都已经生产和消费记录之后启动新的Kinesis应用程序(MyKinesisApp1),那么新的Kinesis应用程序(MyKinesisApp1)是否仍有机会消费该记录?换句话说,Kinesis在处理完记录后是否从流中删除记录,或者无论如何都会将其保留7天?

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


你看过这个答案了吗:https://dev59.com/GqDha4cB1Zd3GeqP8wum#42833193 - az3
这个问题及其答案很好地比较了两种类似但不同的技术。我认为它们类似于那些问题,但并不完全相同。 - CBP
作为一个快速的跟进,我在下面的答案中的评论是我理解这个问题所缺失的信息。它并没有明确地写在任何地方(至少我没有看到)。在阅读下面的答案后,我意识到了这一点。我相信这个问题将会帮助未来的人们。 - CBP
1个回答

8
  1. 在 KCL 配置中,有一个名为“appName”的部分,对应于“应用程序名称”,它与 Kafka 中的“消费者组”相同。对于每个消费者组(即 Kinesis Streams 消费者应用程序),都有一个 DynamoDB 表。您可以在这里查看一个示例 DynamoDB(KCL 的 appName 为“quickstats-development”):AWS Kinesis leaseOwner confusion

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

  3. 是的。每个 Kafka 消费者组在 Kinesis 中表示为不同的 DynamoDB 表。这样,不同的 Kinesis 消费者应用程序可以独立地消耗相同的记录。Kinesis 中的检查点是 Kafka 的 Offset 值。而在 DynamoDB 中的检查点是 Kinesis 分片中读取点的游标位置。查阅此答案以获取类似的示例:https://dev59.com/GqDha4cB1Zd3GeqP8wum#42833193


1
我最初认为Kinesis在处理完记录后会从流中删除记录。但显然情况并非如此。记录将在Kinesis中保留7天。这使得新的Kinesis应用程序有机会将其检查点设置为可用的最早记录,并独立于其他消息开始流式传输。谢谢@az3。 - CBP
1
Kinesis默认保留24小时的记录,但有一个选项可以将数据保留时间增加至7天。 - eugened
没错,CBP。记录并没有从队列中“弹出”,而是通过游标(检查点)在流(分片)上读取覆盖的消息。仅仅通过读取记录并不能将其删除。 - az3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接