根据apacheflink文档,keyby转换在逻辑上将流划分为不相交的分区。具有相同密钥的所有记录都被分配到同一分区。
keyby是100%逻辑转换吗?它不包括用于跨集群节点分发的物理数据分区吗?如果是这样的话,那么它如何保证具有相同密钥的所有记录都被分配到相同的分区呢?
例如,假设我们从由n个节点组成的apachekafka集群获得一个分布式数据流。运行我们的流式作业的apache flink集群由m个节点组成。当keyby转换应用于传入数据流时,它如何保证逻辑数据分区?或者它是否涉及跨集群节点的物理数据分区?
我似乎混淆了逻辑和物理数据分区。
1条答案
按热度按时间ehxuflar1#
所有可能键的键空间被划分为若干个键组。密钥组数(与最大并行度相同)是设置flink集群时可以设置的配置参数;默认值为128。
每个键只属于一个键组。当集群启动时,每个任务管理器都会被分配一些特定的密钥组——如果集群是从检查点或保存点启动的,则这些快照会按密钥组编制索引,并且每个任务管理器都会加载已分配的密钥组中的密钥的状态。
当作业正在运行时,每个任务管理器都知道用于计算键的键选择器函数,以及键如何Map到键组。tms还知道将关键组划分给任务管理器。这样就可以直接将每条消息路由到负责该消息密钥的任务管理器。