Apache Helix 中的 'Partition' 是什么

What is a 'Partition' in Apache 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 中的分区到底是什么?

我认为您说得对,分区本质上是资源的一个实例。与其他分布式系统一样,分区用于实现并行性。只有一个实例的资源只能 运行 在一台机器上。分区只是提供了在多台机器之间拆分单个资源所必需的结构,嗯,就是对资源进行分区。

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

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

这种模式通常适用于许多可扩展性问题,几乎在任何 HA 分布式数据库(例如 DynamoDB、Hazelcast)、map/reduce(例如 Hadoop、Spark)和其他数据或任务驱动的系统中都能找到。

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