我正在学习Apache Helix。我偶然发现了关键字"分区"。
根据这里提到的定义http://helix.apache.org/Concepts.html,(主任务的)每个子任务都被称为Helix中的一个分区
当我浏览配方-分布式锁管理器时,分区只不过是资源的实例。(增加numOfPartitions,锁的数量就会增加)。
final int numPartitions = 12;
admin.addResource(clusterName, lockGroupName, numPartitions, "OnlineOffline",
RebalanceMode.FULL_AUTO.toString());
有人能用一个简单的例子解释一下,ApacheHelix中的分区到底是什么吗?
我认为您是对的,分区本质上是资源的一个实例。与其他分布式系统的情况一样,分区用于实现并行性。只有一个实例的资源只能在一台计算机上运行。分区只是通过对资源进行分区来提供在多台机器之间分割单个资源所需的结构。
这是一种在大部分分布式系统中都可以找到的模式。然而,不同之处在于,例如,分布式数据库明确地将分区定义为可以容纳在单个节点上的一些较大数据集的子集,而Helix更通用,因为分区没有明确的含义或用例,而是有许多潜在的含义和潜在的用例。
我非常熟悉的系统中的一个用例是ApacheKafka的主题分区。在Kafka中,每个主题(本质上是一个分布式日志)都被划分为多个分区。虽然主题数据可以分布在集群中的许多节点上,但每个分区都被限制为单个节点上的单个日志。Kafka通过向新节点添加新分区来提供可扩展性。当消息被生成到Kafka主题时,它们在内部被散列到某个特定节点上的某个特定分区。当从主题消费消息时,消费者在从主题消费时在分区之间切换,从而在节点之间切换。
这种模式通常适用于许多可扩展性问题,并且几乎在任何HA分布式数据库(例如DynamoDB、Hazelcast)、map/reduce(例如Hadoop、Spark)和其他数据或任务驱动系统中都可以找到。
LinkedIn上关于Helix的博客文章实际上也提供了一些关于资源和分区之间关系的有用例子。