【发布时间】: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,但我希望有人能回答这些问题以节省我一些时间。
- KCL 实际上是如何做到这一点的?
- 是否有图表解释该过程?
- 如果我在所有先前的 Kinesis 应用程序已经生成和使用记录之后启动了一个新的 Kinesis 应用程序 (MyKinesisApp1),那么新的 Kinesis 应用程序 (MyKinesisApp1) 是否仍有机会使用该记录?换句话说,Kinesis 是在处理完记录后从其流中删除记录,还是无论如何都会将其保留 7 天?
我已经看到这个问题here,但它没有回答我的问题。尤其是我的第三个问题!此外,这个问题直接比较了两种类似的技术。它将帮助了解 Kafka 的人更快地学习 Kinesis。
【问题讨论】:
-
你读过这个答案了吗:stackoverflow.com/a/42833193/1622134
-
这个问题及其答案很好地比较了两种相似但不同的技术。我看到它们与这些问题相似,但不一样。
-
作为快速跟进,我对以下答案的评论是我理解这个问题的缺失信息。它没有明确写在任何地方(我已经看到)。阅读下面的答案后,我意识到了这一点。我相信这个问题将来会对人们有所帮助。
标签: apache-kafka kafka-consumer-api amazon-kinesis