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

时间:2018-05-05 14:31:58

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

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

在卡夫卡,有一个消费者群体的概念。如果我们在一个主题上有10个消费者组,则每个消费者组将有机会处理主题中的每条消息。消费者群体仍然利用分区的可扩展性(即每个消费者群体可以拥有最多'n'个消费者,其中'n'是主题上的分区数量)。这是卡夫卡的美感,可扩展性和多声道阅读是两个独立的概念,有两个独立的旋钮可以转动。

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

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

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

  1. KCL实际上是如何做到的?
  2. 是否有图表解释过程?
  3. 如果我在所有以前的Kinesis应用程序已经生成并使用了记录后启动了新的Kinesis应用程序(MyKinesisApp1),那么新的Kinesis应用程序(MyKinesisApp1)是否仍有机会使用该记录?换句话说,Kinesis在处理后会从流中删除记录,还是将记录留在那里7天,无论如何?
  4. 我已经看到了这个问题here,但它没有回答我的问题。特别是第三个问题!此外,这个问题直接比较了两种类似的技术。它将帮助了解Kafka的人,更快地学习Kinesis。

1 个答案:

答案 0 :(得分:2)

  1. 在KCL配置中,有一个" appName"对应于"应用程序名称"这和#34;消费者群体#34;在卡夫卡。对于每个使用者组(即Kinesis Streams Consumer Application),都有一个DynamoDB表。您可以在此处查看示例DynamoDB(KCL appName是' quickstats-development'):AWS Kinesis leaseOwner confusion

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

  3. 是。每个Kafka Consumer-Group都表示为Kinesis中的不同DynamoDB表。这样,不同的Kinesis Consumer Applications可以独立地使用相同的记录。 Kinesis中的检查点是Kafka的Offset值。 DynamoDB中的检查点是Kinesis分片中读取点的光标。请阅读此答案以获得类似示例:https://stackoverflow.com/a/42833193/1622134