Druid-Druid中Coordinator Process

  • 基于apache-druid-0.17.0
  • Configuration和HTTP endpoints详见官网;

概览

  • Druid中Coordinator进程主要是负责Segment的管理和分配。更具体的说,Coordinator进程和Historical进程保持通信,根据Configuration信息加载或者删除Segment。Coordinator进程负责加载新的Segment、删除过期的Segment、管理Segment的复制备份、Segment的负载均衡。
  • Coordinator进程会定期运行,时间间隔是依据配置参数druid.coordinator.period(default:PT60S)。当Coordinator进程运行时,在Coordinator进程决定执行某些动作(actions)之前,会评估集群的当前状态。Coordinator进程同 Broker 和Historical进程一样,会将当前集群状态信息维护到zookeeper集群中。Coordinator进程将rules和可用的Segment的信息保存到数据库中。可用的Segment会存储在Segment Table中,并列出集群中应该加载的所有的Segment集合。rules信息存储在Rule Table中,指导Coordinator进程如何处理Segment。
  • 在任何未分配的Segment 由Historical进程提供服务之前,每个层的可用Historical进程首先按照容量排序,容量最小的服务器拥有最高的优先级。未分配的Segment总是分配给容量最小的Historical进程,以保持Historical进程之间的平衡。Coordinator进程在为Historical进程分配新的Segment时不直接与它通信;相反,Coordinator进程在Historical进程的负载队列路径下创建一些关于新的Segment临时信息。当 Historical看到这个请求,就会立即加载这个Segment,并开始为这个Segment提供服务。

Coordinator启动命令

org.apache.druid.cli.Main server coordinator

Rules (Segment相关规则)

清理Segment

  • 每次运行时,Coordinator进程都会比较数据库中可用的Segment列表和集群中当前的Segment列表。不在数据库中但仍在集群中提供服务的Segment将被标记并附加到删除列表中。被覆盖的Segments(它们的版本太旧,它们的数据被更新的Segment取代l)也被删除。

Segment可用性

  • 如果一个Historical进程重新启动或者因为任何原因变得不可用时,Coordinator将会注意到这个Historical进程已经丢失,并将这个Historical进程服务的所有Segments视为被丢弃。如果有足够的时间,Coordinator可以将Segments重新分配给集群中的其他Historical进程。但是,被删除的每个Segment不会立即被Coordinator丢弃。取而代之的是一个过渡性的数据结构,这个数据结构存储所有带着生存期(lifetime)的已经删除的Segment。(生存期为Coordinator不会分配已经删除的Segment的时间)。因此,如果Historical进程在短时间内变得不可用并再次可用时,则Historical进程将启动并从其缓存保存的Segment,而不会在集群中重新分配这些Segment。

Segment的负载均衡

  • 为了确保集群中各个Historical进程之间Segment的均匀分布,Coordinator进程将在Coordinator每次运行时查找每个Historical进程所服务的所有Segment的总大小。对于集群中的每个Historical进程,Coordinator进程将判断出利用率最高的Historical和利用率最低的Historical进程。Coordinator计算两个Historical进程之间的利用率差异百分比,如果结果超过某个阈值,Coordinator则将一些段从利用率最高的Historical进程移动到利用率最低的Historical进程(阈值为可配置项)。要移动的Segment是随机选择的,只有当Coordinator计算出的利用率最高和最低服务器之间的百分比差异已经减小时才会移动。

压缩Segment

  • 每次运行时,Coordinator通过合并小的Segment或者切割大的Segment来压缩片段。当您的segment没有做相应的优化时,这些时非常有用的。详见segment-optimization
  • Coordinator首先根据Segment搜索策略(Segment search policy)找到要压缩的Segment。一旦找到这些Segment,Coordinator就发出一个压缩任务来压缩这些Segments。压缩任务同时运行的数量为(sum of worker capacity * slotRatio, maxSlots)。请注意,即使(sum of worker capacity * slotRatio, maxSlots)= 0,如果数据源启用了压缩,也始终会提交至少一个压缩任务。详情见官网:compaction-configurationcompaction-dynamic-configuration
  • 压缩任务存在失败原因如下:
    • 如果压缩任务的输入Segment在启动之前被删除或覆盖,则该压缩任务将立即失败。
    • 如果一个高优先级的任务获得一个时间块锁(time chunk lock
      ),该时间块锁的时间间隔与一个压缩任务的时间间隔重叠,则压缩任务失败。
  • 一旦压缩任务失败,Coordinator只需再次检查失败任务间隔中的Segments,并在下一次运行时发出另一个压缩任务。

Segment搜索策略

近期Segment优先策略

  • 在Coordinator每次运行时,该策略都会按时间块的由早到晚的顺序查找时间块,并检查这些时间块中的段是否需要压缩。如果满足以下所有条件,则需要压缩一组段。
    • 1-Total size of segments in the time chunk is smaller than or equal to the configured inputSegmentSizeBytes.
    • 2-Segments have never been compacted yet or compaction spec has been updated since the last compaction, especially maxRowsPerSegment, maxTotalRows, and indexSpec.
  • 案例如下:假如我们有两个数据源:dataSources (foo, bar)
  • foo
    • foo_2017-11-01T00:00:00.000Z_2017-12-01T00:00:00.000Z_VERSION
    • foo_2017-11-01T00:00:00.000Z_2017-12-01T00:00:00.000Z_VERSION_1
    • foo_2017-09-01T00:00:00.000Z_2017-10-01T00:00:00.000Z_VERSION
  • bar
    • bar_2017-10-01T00:00:00.000Z_2017-11-01T00:00:00.000Z_VERSION
    • bar_2017-10-01T00:00:00.000Z_2017-11-01T00:00:00.000Z_VERSION_1
  • 假如每个Segment为10M且从未压缩过。搜索策略会优先返回两个segment,foo_2017-11-01T00:00:00.000Z_2017-12-01T00:00:00.000Z_VERSIONfoo_2017-11-01T00:00:00.000Z_2017-12-01T00:00:00.000Z_VERSION_1进行压缩。因为2017-11-01T00:00:00.000Z/2017-12-01T00:00:00.000Z是最近的时间块。
  • 如果Coordinator有足够的slots用于压缩任务,搜索策略会继续查找bar_2017-10-01T00:00:00.000Z_2017-11-01T00:00:00.000Z_VERSIONbar_2017-10-01T00:00:00.000Z_2017-11-01T00:00:00.000Z_VERSION_1。最后,foo_2017-09-01T00:00:00.000Z_2017-10-01T00:00:00.000Z_VERSION也会被执行,尽管在时间块2017-09-01T00:00:00.000Z/2017-10-01T00:00:00.000Z中只有一个Segment。
  • 开始查找的时间点可以按照skipOffsetFromLatest进行配置。此策略将忽略掉在时间段的Segment(最近的Segment的结束时间—skipOffsetFromLatest)。
    这是为了避免压缩任务和实时任务之间的冲突。注意,在默认情况下,实时任务的优先级高于压缩任务。如果压缩任务的时间间隔重叠,Realtime任务将撤销它们的锁,从而导致压缩任务终止。

FAQ

Client是否会永远与 Coordinator 进程保持通信?

  • 答:Coordinator不涉及query
    • Historical进程从不直接与Coordinator进程通信。Coordinator告诉通过Zookeeper告诉Historical进程加载/删除数据,而且Historical进程完全不知道Coordinator。
    • Broker也从不与Coordinator通信。Broker是根据Historical进程写入ZK的元数据来理解数据拓扑,进程完全不知道Coordinator。

Coordinator进程在其他进程之前或之后启动有关系(区别)吗?

  • 答:无区别。
  • 如果Coordinator没有启动,集群中不会加载新的segment,过期的Segment也不会被丢弃。但是,Coordinator进程可以在任何时候启动,并且在可配置的延迟之后,将开始运行Coordinator任务。
  • 这也意味着,如果有一个正在工作的集群,并且所有Coordinator都已停止运行,那么集群将继续运行,它只是不会感知到任何数据拓扑结构的更改。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,928评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,748评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,282评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,065评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,101评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,855评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,521评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,414评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,931评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,053评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,191评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,873评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,529评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,074评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,188评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,491评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,173评论 2 357

推荐阅读更多精彩内容

  • Druid.io(以下简称Druid)是面向海量数据的、用于实时查询与分析的OLAP存储系统。Druid的四大关键...
    大诗兄_zl阅读 6,463评论 0 9
  • 我们知道Druid能够同时提供对大数据集的实时摄入和高效复杂查询的性能,主要原因就是它独到的架构设计和基于Data...
    零度沸腾_yjz阅读 21,519评论 3 17
  • 我们知道Druid能够同时提供对大数据集的实时摄入和高效复杂查询的性能,主要原因就是它独到的架构设计和基于Data...
    allin8116阅读 481评论 0 2
  • 一个用于实时分析的开源数据存储 摘要 Druid是专用于基于大数据集的实时探索分析的开源数据存储。该系统包括列式存...
    Sisyphus秋居拾遗阅读 3,015评论 1 5
  • Druid io总体设计 1.Druid模块架构 1.1 Druid简介 最新版本的Druid采用了位图索引、字典...
    小武大讲堂阅读 1,834评论 0 2