kafka 模仿netty自己实现
hbase/hdfs 用netty
flink/spark 老版本 akka 新版本 netty
hadoop 是大量数据传输用http,常规远程调用用hadoop RPC
主从NameNode的镜像备份和合并的数据传输通过http形式,大量数据传输用http
简单的方法调用用hadoop RPC,如获取文件契约(类似获取文件的写锁)
额外简单提及一下:
NameNode不会直接操作DataNode,主要通过DataNode主动通过周期性发送心跳给NameNode,
然后NameNode返回响应指令给DataNode。
某个client或dataNode想访问某个dataNode,都需要先和NameNode通信获取主机名端口号。
DataNode启动后开放一个(RPC)socket服务,等待别人调用
DataNode写流程
DataNode对NameNode心跳保持文件契约和续约
pipeline数据管道流程,减小客户端压力
有数据容错,收到数据传输成功的ack,才会删除数据。不然重试
凡是涉及到主从的都是需要使用zookeeper来实现的
hadoop
Zookeeper负责NameNode主从选举和切换,DN同时向NN们回报block清单
kafka
1 zk负责主从副本的选举,记录元数据信息
2 主副本监听zk元数据的变化(即如后续用户修改了分区数量等问题)并作更新,然后从副本做元数据同步
kafka 主副本不需要动态修改元数据信息。因为分区数量,副本数量多少等问题是kafka启动时就设定好的,是静态的不是动态的,数据只需要根据hash等规则固定的打散写入不同的副本中即可
hbase
1 zk负责master主从选举,记录元数据信息
2 hbase 和 kafka 不一样,因为涉及数据的动态文件合并/切分/GC等,元数据不是固定不变的。所以hbase需要加入master角色来负责做数据的负载均衡等问题,并更新到zookeeper中。
3 master不和RegionServer集群通讯,rs集群和zk汇报信息,master只监听zk子节点的变化即可。即如集群添加一个rs,子节点会增加一个,master则能够感知到 (这点和kafka主副本功能类似)
现象总结:单主多从,单主节点宕机,也就是当Master不存在时,依然支持数据的读写。但是 1 不能再建表,修改表结构 2 不能再处理如region的切分等造成的元数据变动