2

我正在尝试在 Spark Structured Streaming 和 Hazelcast Jet 之间映射一些概念,并了解其他主题。

Q1 - 在 Spark 中,每个 Kafka 分区将成为 spark 内部的一个分区,然后它们将由各个任务并行处理。我想我在某处读到 Hazelcast Jet 将合并来自 kafka 的所有消息,而不管 group.id 和主题分区,对吗?

Q2 - 我们如何增加 Jet 程序中的“消费者”数量以增加 kafka 消耗的吞吐量?在 Spark 中,我想我们只需要增加主题分区的数量就可以为新分区分配新的 spark 任务。

Q3 - 如果上面的 Q1 为真,是否可以避免合并和分发 kafka 分区以并行处理?一旦消息已经在 kafka 分区中分组和排序,合并所有消息意味着需要额外的处理来重新分区和再次排序消息。

Q4 - 如何定义每个顶点的数量?我的意思是,在字数统计示例中,我们有分词器和累加器,Jet 将如何决定/划分处理器的数量来创建分词器和累加器的实例?

4

1 回答 1

1

A1 - 并行处理器的数量完全独立于 Kafka 分区的数量。处理器的数量由顶点的局部并行度和成员的数量决定:

totalParallelism = numberOfMembers * localParallelism

每个处理器将被分配所有主题分区的子集并使用一个KafkaConsumergroup.id不使用,Jet 使用手动分区分配。

A2 - 向 Kafka 主题添加新分区不会增加消费者的数量。您需要增加本地并行度。

A3 - “合并”和“排序”没有额外的成本。你可能想看看这里。基本上每个顶点由多个并行处理器支持,每个边由多个队列支持,每两个处理器一个队列。如果下游处理器从多个队列中获取项目,它只是按队列进行;合并没有额外费用。在重新排序项目的意义上也没有排序。如果边缘不是分布式的,则所有处理都是本地的,并且没有任何内容被序列化。

答案适用于 Jet 0.5.1 和 0.6(在撰写本文时正在开发中)。

A4 - 见 A1。

于 2018-01-23T21:15:49.797 回答