阅读文档(http://snappydatainc.github.io/snappydata/streamingWithSQL/)并对此项目提出疑问:
"通过共同分区减少了混乱:使用SnappyData,输入队列使用的分区键(例如,对于Kafka源),流处理器和底层存储都可以是相同的。这大大减少了随机播放记录的需要。"
如果我们使用Kafka并使用密钥(单个值)在主题中对数据进行分区。是否可以将这个单一密钥从kafka映射到snappy表中标识的多个分区键?
是否存在将多个密钥转换为单个密钥的某种哈希值?
减少洗牌的好处似乎很重要,并试图了解这里的最佳做法。
谢谢!
答案 0 :(得分:0)
使用DirectKafka流,每个分区从自己指定的主题中提取数据。如果没有为存储表指定分区,那么每个DirectKafka分区将只放入本地存储桶,然后一切都将排好,无需额外的任何东西。唯一要注意的是足够多的主题(因此是分区)以获得更好的并发性 - 理想情况下至少与集群中处理器核心总数一样多,因此所有核心都很忙。
当显式地分区存储表时,SnappyData的存储已被调整为使用与Spark的HashPartitioning相同的散列(对于列和行表的“PARTITION_BY”选项),因为它是在Catalyst SQL执行层使用的那个。因此执行和存储始终并置。 但是,将其与DirectKafka分区的摄取进行对齐将需要一些手动工作(将kafka主题分区与HashPartitioning对齐,然后使每个DirectKafka分区的首选位置与存储匹配)。将在即将发布的版本中进行简化。