Performance 数据流分区(对于updateStateByKey())是如何工作的,以及如何验证它?
我正在使用Performance 数据流分区(对于updateStateByKey())是如何工作的,以及如何验证它?,performance,apache-spark,apache-kafka,spark-streaming,Performance,Apache Spark,Apache Kafka,Spark Streaming,我正在使用updateStateByKey()操作来维护Spark流媒体应用程序中的状态。输入数据来自卡夫卡主题 我想了解数据流是如何划分的 分区是如何使用mapWithState()或updateStatebyKey()方法的 在updateStateByKey()中,是否在同一节点上处理给定键的旧状态和新值 updateStateByKey()方法的洗牌频率有多高 我必须维护的状态包含约100000个键,我希望避免每次更新状态时都出现混乱,有什么提示吗?链接到Tathagat Das对同一问
updateStateByKey()
操作来维护Spark流媒体应用程序中的状态。输入数据来自卡夫卡主题
我必须维护的状态包含约100000个键,我希望避免每次更新状态时都出现混乱,有什么提示吗?链接到Tathagat Das对同一问题的答案: 案文如下: 默认情况下,
mapWithState()
和updateStateByKey()
都使用HashPartitioner
,并对应用状态操作的键值DStream
中的键进行散列。新的数据和状态在完全相同的分区器中进行分区,因此来自新数据(来自输入DStream
)的相同密钥将被洗牌,并与已分区的状态RDD共存。因此,新数据在同一台机器中被带到相应的旧状态,然后
应用状态映射/更新功能
状态不是每次都被洗牌,只有新数据的批次在每个批次中被洗牌updateStateByKey将一个分区作为它的第二个参数 理解和解释是两件截然不同的事情。上述内容对我来说简直是胡言乱语(有些陈述甚至不是有效的英语。我不认为这完全回答了这个问题-你能补充一些细节吗?