理解一些概念和Hazelcast Jet与卡夫卡的结合

理解一些概念和Hazelcast Jet与卡夫卡的结合,hazelcast,hazelcast-jet,Hazelcast,Hazelcast Jet,我正在尝试映射Spark结构化流媒体和Hazelcast Jet之间的一些概念,并理解其他主题 Q1-在Spark中,每个Kafka分区将成为Spark中的一个分区,然后它们将由单个任务并行处理。我想我在某个地方读到过,Hazelcast Jet将合并来自kafka的所有消息,而不考虑group.id和topic分区,对吗 问题2:我们如何增加喷气式飞机项目中的“消费者”数量,以增加卡夫卡的吞吐量?在Spark中,我想我们只需要增加主题分区的数量,就可以为新分区分配一个新的Spark任务 Q3-

我正在尝试映射Spark结构化流媒体和Hazelcast Jet之间的一些概念,并理解其他主题

Q1-在Spark中,每个Kafka分区将成为Spark中的一个分区,然后它们将由单个任务并行处理。我想我在某个地方读到过,Hazelcast Jet将合并来自kafka的所有消息,而不考虑group.id和topic分区,对吗

问题2:我们如何增加喷气式飞机项目中的“消费者”数量,以增加卡夫卡的吞吐量?在Spark中,我想我们只需要增加主题分区的数量,就可以为新分区分配一个新的Spark任务

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


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

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

totalParallelism = numberOfMembers * localParallelism
每个处理器将被分配所有主题分区的子集,并使用一个
KafkaConsumer
<代码>组id未使用,Jet使用手动分区分配

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

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

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


A4-见A1。

谢谢@Oliv。在长时间运行的应用程序(如无限流消费者)中,是否可以动态重新定义(增加或减少)平行顶点的数量(totalParallelism=numberOfMembers*localParallelism)?我的意思是,如果加入集群中的新成员,我可以重新定义应用程序的并行性而不关闭并重新启动它吗?因为本地并行性是根据CPU内核的数量设置的,所以增加它没有好处。@KleysonRios不,这是不可能的。只有在作业重新启动时,才能更改并行性。但是,Jet 0.5(可能还有0.6)没有手动重新启动作业的API。您只能取消作业,但会丢失状态。@Oliv这有点奇怪,因为我可以加入群集中的新节点,但我的应用程序无法扩展,除非停止它,失去所有状态并重新启动它。Jet客户如何处理这一需求?@MarkoTopolnik我同意增加本地并行性不会在性能上有任何好处,但增加“numberOfMembers”会有好处。