【问题标题】:How does Kinesis achieve Kafka style Consumer Groups?Kinesis 如何实现 Kafka 风格的 Consumer Groups?
【发布时间】:2018-05-05 14:31:58
【问题描述】:

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

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

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

我们还被告知“Amazon Kinesis 客户端库 (KCL) 会自动为每个 Amazon Kinesis 应用程序创建一个 Amazon DynamoDB 表,以跟踪和维护状态信息,例如重新分片事件和序列号检查点。”

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

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

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

【问题讨论】:

  • 你读过这个答案了吗:stackoverflow.com/a/42833193/1622134
  • 这个问题及其答案很好地比较了两种相似但不同的技术。我看到它们与这些问题相似,但不一样。
  • 作为快速跟进,我对以下答案的评论是我理解这个问题的缺失信息。它没有明确写在任何地方(我已经看到)。阅读下面的答案后,我意识到了这一点。我相信这个问题将来会对人们有所帮助。

标签: apache-kafka kafka-consumer-api amazon-kinesis


【解决方案1】:
  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://stackoverflow.com/a/42833193/1622134

【讨论】:

  • 我最初认为 Kinesis 在处理后从流中删除了记录。但显然这不是发生的事情。该记录在 Kinesis 中保留 7 天。这使新的 Kinesis 应用程序有机会将检查点设置为可用的最早记录,并独立于其他消息从它们开始流式传输。谢谢@az3。
  • Kinesis 默认将记录保留 24 小时,但可以选择将数据保留时间延长 7 天。
  • 没错,CBP。记录不会从队列中“弹出”,您可以通过游标(检查点)读取流(分片)上的覆盖消息。仅读取记录不会删除记录。
猜你喜欢
  • 2019-12-29
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-02
  • 2021-12-13
  • 2019-11-27
  • 2020-09-30
相关资源
最近更新 更多