当前位置: 首页 > 知识库问答 >
问题:

运动流和闪烁

林修真
2023-03-14

我有一个关于在Kinesis流中分片数据的问题。我想在向我的kinesis流发送用户数据时使用一个随机分区键,这样碎片中的数据是均匀分布的。为了使这个问题更简单,我想通过在Flink应用程序中键入用户ID来聚合用户数据

共有1个答案

宰子琪
2023-03-14

...Flink是否可以处理多个碎片的读取,然后重新分配数据,以便将单个用户ID的所有数据流到同一个聚合器任务?

如果您使用Flink的DataStream API,键比(e->e.userId)的作用是重新分发所有事件,以便任何特定用户ID的所有事件都将流式传输到相同的下游聚合器任务。

每个主机是否会从流中分片的子集读取数据,然后使用keyBy操作符将相同密钥的消息传递给将执行实际聚合的主机?

例如,如果您有8台物理主机,每个主机提供8个插槽用于运行作业,那么将有64个聚合器任务实例,每个实例将负责密钥空间的一个不相交的子集。

假设有超过64个碎片可供读取,那么在64个任务中的每一个任务中,源将从一个或多个碎片读取,然后根据它们的userid分发它读取的事件。假设userid均匀地分布在各个分片上,那么每个源实例将发现它读取的一些事件是针对它被分配处理的userid,并且应该使用本地聚合器。其余的事件都需要发送到其他63个聚合器中的一个,这取决于哪个工作者负责每个用户ID。

 类似资料:
  • 作业并行性(4,8,16):[自动生成源]-->[Map1]-->[滚动窗口(10s)]-->[Map2]-->[接收器] Flink窗口性能eps 4p、8p、16p 作业以上的性能最高达到了每秒50k+-左右,不管我如何将集群缩放成4-16的并行度。 闪烁性能无窗口4p、8p 我已经删除了窗口的逻辑,以消除瓶颈性能的应用程序逻辑,但似乎窗口仍然导致我的整个流性能下降,即使该窗口只是一个通过函数

  • 我创建小应用程序来显示我的问题。您可以在https://github.com/anton111111/exampleglideblink中看到它。 当我调用RecyerView适配器上的notifyItemChanged时,我只需要更改文本(在我的示例中,它使用id r.id.progress EditText)和图像,而不需要更改。但它会眨眼。 我有能力不眨眼地更改文本吗?

  • 我想运行流作业。 当我尝试使用和Flink Web界面在本地运行该作业时,没有问题。 但是,我当前正在尝试使用Flink on YARN(部署在Google Dataproc上)运行我的作业,并且当我尝试取消它时,取消状态将永远持续,并且TaskManager中仍有一个插槽被占用。 这是我得到的日志:

  • 我正在尝试对Flink中的KeyedStream执行映射操作: JsonToObjectMapper运算符的输出是类MessageObject的POJO,它有一个字符串字段'keyfield'。然后在该字段上键入流。 代码抛出NullPointer异常: 似乎其中一个KeyedStream的keyedState中的键为null,尽管我已经验证了'keyfield'始终是有效字符串。根据Flink文

  • 我的目标是有一个Flink流程序,保留最后的N个id,其中id是从事件中提取的。接收器是一个Cassandra存储区,因此可以随时获取ID列表。重要的是,卡桑德拉在每一次事件发生时都要立即得到最新消息。

  • 我正在运行一个简单的示例来测试基于EventTime的Windows。我能够生成带有处理时间的输出,但当我使用EventTime时,没有输出。请帮助我明白我做错了什么。