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

CBP*_*CBP 7 apache-kafka amazon-kinesis kafka-consumer-api

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

在卡夫卡,有一个消费群体的概念。如果我们在一个主题上有10个消费者组,则每个消费者组将有机会处理一个主题中的每条消息。使用者组仍然利用分区的可伸缩性(即每个使用者组最多可以有'n'个使用者,其中'n'是一个主题上的分区数)。这就是kafka的优点,可扩展性和多通道读取是两个独立的概念,需要旋转两个独立的旋钮。

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

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

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

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

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

az3*_*az3 6

  1. 在KCL配置中,有一个“appName”部分对应“Application Name”,与Kafka中的“consumer group”相同。对于每个消费者组(即 Kinesis Streams 消费者应用程序),都有一个 DynamoDB 表。您可以在此处查看 DynamoDB 示例(KCL 应用程序名称为“quickstats-development”):AWS Kinesis 租赁所有者混淆

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

  3. 是的。每个 Kafka 消费者组在 Kinesis 中表示为不同的 DynamoDB 表。这样,不同的 Kinesis 消费者应用程序可以独立使用相同的记录。Kinesis 中的 checkpoint 是 Kafka 的 Offset 值。DynamoDB 中的检查点是 Kinesis 分片中读取点的光标。阅读此答案以获取类似示例:https : //stackoverflow.com/a/42833193/1622134