在Kafka,我可以将我的主题分成许多分区。我不能拥有比Kafka中的分区更多的消费者,因为分区用作扩展主题的一种方式。如果我有更多的负载,我可以增加分区的数量,这将允许我增加消费者的数量,这将允许我在给定主题上有更多的线程/进程处理。
在卡夫卡,有一个消费者群体的概念。如果我们在一个主题上有10个消费者组,则每个消费者组将有机会处理主题中的每条消息。消费者群体仍然利用分区的可扩展性(即每个消费者群体可以拥有最多'n'个消费者,其中'n'是主题上的分区数量)。这是卡夫卡的美感,可扩展性和多声道阅读是两个独立的概念,有两个独立的旋钮可以转动。
在Kinesis中,我们被告知,如果您使用Kinesis Library Client,您可以通过定义不同的Kinesis应用程序获得与使用者组相同的功能。换句话说,我们可以让不同的Kinesis应用程序独立地流式传输来自同一流和不同时间的所有记录。
我们还被告知“Amazon Kinesis客户端库(KCL)会自动为每个Amazon Kinesis应用程序创建一个Amazon DynamoDB表,以跟踪和维护状态信息,例如重新分片事件和序列号检查点。”
好的,我正准备开始阅读KCL代码here,但我希望有人可以回答这些问题以节省我一些时间。
我已经看到了这个问题here,但它没有回答我的问题。特别是第三个问题!此外,这个问题直接比较了两种类似的技术。它将帮助了解Kafka的人,更快地学习Kinesis。
答案 0 :(得分:2)
在KCL配置中,有一个" appName"对应于"应用程序名称"这和#34;消费者群体#34;在卡夫卡。对于每个使用者组(即Kinesis Streams Consumer Application),都有一个DynamoDB表。您可以在此处查看示例DynamoDB(KCL appName是' quickstats-development'):AWS Kinesis leaseOwner confusion
不,据我所知,没有。 " Kinesis Streams"类似于Kafka,但除此之外,图形表示不多。
是。每个Kafka Consumer-Group都表示为Kinesis中的不同DynamoDB表。这样,不同的Kinesis Consumer Applications可以独立地使用相同的记录。 Kinesis中的检查点是Kafka的Offset值。 DynamoDB中的检查点是Kinesis分片中读取点的光标。请阅读此答案以获得类似示例:https://stackoverflow.com/a/42833193/1622134