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