DStreams的分区(对于updateStateByKey())如何工作以及如何验证它?

时间:2015-12-24 04:37:04

标签: performance apache-spark apache-kafka spark-streaming

我正在使用updateStateByKey()操作来维护我的Spark Streaming应用程序中的状态。输入数据来自Kafka主题。

  1. 我想了解DStreams是如何分区的?
  2. 分区如何使用mapWithState()或updateStatebyKey()方法?
  3. 在updateStateByKey()中,在同一节点上处理给定键的旧状态和新值吗?
  4. updateStateByKey()方法的随机播放频率是多少?
  5. 我必须维护的状态包含~100000个键,我想在每次更新状态时避免随机播放,有任何提示吗?

2 个答案:

答案 0 :(得分:2)

链接到Tathagat Das对同一问题的回答:

https://www.mail-archive.com/user@spark.apache.org/msg43512.html

以下是文字:

默认情况下,mapWithState()updateStateByKey()都使用HashPartitioner,并在应用了状态操作的键值DStream中对键进行哈希处理。新数据和状态是完全相同的分区中的分区,因此来自新数据(来自输入DStream)的相同键被混洗并与已经分区的状态RDD共同定位。因此,新数据在同一台机器中被带到相应的旧状态然后 应用状态映射/更新功能。

每次都没有洗牌状态,每批次只有一批新数据被洗牌

答案 1 :(得分:0)