2015-03-31 68 views
0

我正在学习Apache Helix。我遇到了关键字'分区'。
根据这里提到的定义http://helix.apache.org/Concepts.html,(主任务的)每个子任务被称为Helix中的分区。
当我通过配方 - 分布式锁定管理器时,分区只不过是资源的实例。 (增加numOfPartitions,增加锁的数量)。
什么是Apache Helix中的“分区”

final int numPartitions = 12; 
admin.addResource(clusterName, lockGroupName, numPartitions, "OnlineOffline", 
      RebalanceMode.FULL_AUTO.toString()); 

有人可以用简单的例子说明一下,究竟是什么分区Apache的Helix是?

回答

1

我认为你是对的,分区本质上是一个资源的实例。与其他分布式系统一样,分区用于实现并行性。只有一个实例的资源只能在一台机器上运行。分区只是简单地提供必要的构造,以便通过对资源进行分区来在多台机器中分配单个资源。

这是一种可在大部分分布式系统中找到的模式。不过,差别在于,例如,分布式数据库显式地将分区定义为一个可放在单个节点上的较大数据集的子集,Helix更通用,因为分区没有明确的含义或用例,但有许多潜在的含义和潜在的用例。

其中一个我非常熟悉的系统中的用例是Apache Kafka的主题分区。在Kafka中,每个主题 - 实质上是一个分布式日志 - 被分成许多分区。虽然主题数据可以分布在集群中的许多节点上,但每个分区都被限制为单个节点上的单个日志。 Kafka通过向新节点添加新分区来提供可扩展性。当消息生成到Kafka主题时,它们在内部被散列到某个特定节点上的某个特定分区。消息从主题消费时,消费者会在分区之间切换 - 因此会在主题中消耗其节点。

该模式通常适用于许多可伸缩性问题,几乎可以在任何HA分布式数据库(例如DynamoDB,Hazelcast),map/reduce(例如Hadoop,Spark)以及其他数据或任务驱动系统中找到。

LinkedIn blog post about Helix实际上给出了一堆资源和分区之间关系的有用示例。