kafka本身就是保障分区内的数据有序,但是主题有多个分区,这个主题的多有数据不敢保证有顺序,所以我们需要为进入topic的数据做好key的分配(相同key只能进同一分区),保障相同的key的数据是有顺序,这样后续的实时数仓才方便计算,至于离线数仓要保障全局数据的顺序很简单,从新排序一下即可。
HMaster 收到 HRegionServer 宕机的通知,它的职责是重新分配 region,分配的方式是把 region 信息放在 Zookeeper ,等待健康的 Regionserver 来获取。这样成功把 region 分配至其他 HRegionServer。同时 HMaster 还会对 HRegionServer 上存在 memstore 中还未持久化到磁盘中的数据通过 WAL 来进行恢复,WAL 就是一个存储在 HDFS 上的文件,用于记录客户端对 HRegionServer 数据的操作指令
1、向 zookeeper 发起请求,获得 META 所在的 region,再根据 table、namespace、rowkey 信息去 META 表中找到目标数据对应的 Region 信息以及 Regionserver(ROOT 表从 0.96 版本开始已经被淘汰)* MemStore 达到一个阈值后则会把数据刷成一个 StoreFile 文件落到磁盘,同时将内存中的数据删除,并删除 Hlog 中的历史数据。在 Hlog 中做标记点,若 MemStore 中的数据有丢失,则可以从 HLog 上恢复;
* Minor 操作会获取相邻的部分小StoreFile来执行合并操作,不做清理多版本数据和删除数据的操作,尽量不影响集群的正常工作。 * Major 操作是对 Region下的Store的所有StoreFile执行合并操作,输出成一个StoreFile,这是一个比较耗费资源的操作,所以不宜频繁Major Compact。
* 首先更改当前 Region 在 Zookeeper 中的状态为 SPLITING。master 也会同步这个状态。 * 生成两个子文件,只存储切分点 splitkey 和一个 Boolen 类型变量(用来标记这个文件是上半部分还是下半部分)。 * 为避免数据的频繁读写,只有在子Region执行 Major Compact 后才会将父Region中属于该子Region的所有数据读出来并写入数据文件中。