什么是Apache Helix中的“分区”

时间:2015-03-31 05:34:10

标签: apache distributed-computing high-availability helix

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

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

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

1 个答案:

答案 0 :(得分:4)

我认为你的分区本质上是一个资源的实例是对的。与其他分布式系统中的情况一样,分区用于实现并行性。只有一个实例的资源只能在一台机器上运行。分区只是提供了在许多机器中拆分单个资源所需的构造,即分区资源。

这是在大部分分布式系统中都可以找到的模式。不过,不同之处在于分布式数据库显式地将分区定义为可以适合单个节点的某些较大数据集的子集,Helix更通用,因为分区没有明确的含义或用例,但有许多潜在的含义和潜在的用例。 / p>

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

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

LinkedIn blog post about Helix实际上提供了许多资源和分区之间关系的有用示例。