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

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

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

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

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

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

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

    最佳答案

  • 在KCL配置中,存在一个名为“appName”的部分,该部分对应于“应用程序名称”,并且与Kafka中的“消费者组”相同。对于每个消费者组(即Kinesis Streams消费者应用程序),都有一个DynamoDB表。您可以在此处看到示例DynamoDB(KCL appName为'quickstats-development'):AWS Kinesis leaseOwner confusion
  • 不,据我所知没有。 “Kinesis Streams”类似于Kafka,但除此之外,图形表示形式不多。
  • 是的。每个Kafka消费者组在Kinesis中代表一个不同的DynamoDB表。这样,不同的Kinesis Consumer应用程序可以独立使用相同的记录。 Kinesis中的检查点是Kafka的Offset值。 DynamoDB中的检查点是Kinesis分片中读取点的光标。阅读此答案以获取类似示例:https://stackoverflow.com/a/42833193/1622134
  • 关于apache-kafka - Kinesis如何实现Kafka风格的消费者群体?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50190549/

    10-12 20:15