Google cloud dataflow Google dataflow GroupByKey可以处理热键吗?

Google cloud dataflow Google dataflow GroupByKey可以处理热键吗?,google-cloud-dataflow,apache-beam,dataflow,Google Cloud Dataflow,Apache Beam,Dataflow,输入为PCollection 我必须写文件的关键和每行作为价值的千伏组。 为了根据密钥进行分组,我有两个选项: 1.GroupByKey-->PCollection 2.Combine.perKey.withhotKeyFanout-->PCollection 其中,值字符串是所有对中的累积字符串。 (Combine.CombineFn) 每把钥匙可以有上百万条记录。使用Windows和Trigger优化了钥匙数据的收集,每把钥匙仍然可以有数千条记录。 我担心,如果使用Combine.perKe

输入为
PCollection
我必须写文件的关键和每行作为价值的千伏组。 为了根据密钥进行分组,我有两个选项: 1.GroupByKey-->
PCollection
2.Combine.perKey.withhotKeyFanout-->PCollection 其中,值字符串是所有对中的累积字符串。
(Combine.CombineFn)

每把钥匙可以有上百万条记录。使用Windows和Trigger优化了钥匙数据的收集,每把钥匙仍然可以有数千条记录。 我担心,如果使用
Combine.perKey.withHotKeyFanout
创建一个CustomStringObJ,并将
List
作为要写入文件的成员,字符串的最大大小将导致问题


如果我们使用GroupByKey,如何处理热键?

您应该使用
GroupByKey
的方法,而不是使用
Combine
连接大字符串。实际实现(并非数据流独有)是根据元素的键对元素进行洗牌,并且在输出
KV
中,值的iterable是洗牌到该键的元素上的特定惰性/流化视图。没有构造实际的iterable—这与将每个元素路由到拥有每个文件的工作人员并直接写入它一样好


使用窗口和触发器实际上可能会强制缓冲,从而降低效率。如果事件时间窗口是您的业务案例的一部分,您应该只使用事件时间窗口;它不是控制性能的机制。触发器有助于管理数据的批处理和下游发送方式,但对于聚合最有用,因为在聚合中,触发频率较低会节省大量数据量。对于元素的原始分组,触发器往往不太有用。

编辑了自定义对象的问题。我已经阅读了GroupByKey在热键情况下的吞吐量可能会更低。我计划使用一个自定义对象,将字符串列表作为成员,并将其用作Combine的输出@肯诺尔斯