kafka、zookeeper一文看懂

Yarn的重点知识:

Yarn相信大家用的比较多,本文的重点不是讲yarn,因为Yarn作为hadoop集群的总统山级别的组件,不是一下子可以完全讲清楚的,暂时简单介绍下面几点:

1    ResourceManager    资源管理、协调

2    Standby ResourceManager    RM的从节点,备用节点

3    NodeManager    负责节点上任务的调配,管理,上级领导是RM,每个节点上都有一个NM

4    YARN Client    Yarn的客户端,集群内的某个节点,需要装了Yarn的客户端后,才能在那个节点对Yarn进行擦欧总

kakfa的重点知识:

1    producer    

kafka生产者    即是source        
可以从很多地方生产数据:
-- 监听固定端口
-- 监听文件或者文件夹
-- 监听flume

2    consumer
kafka消费者    即是sink        
即是消费数据
-- 可以用pyspark将生产者接进来的数据,通过这个接口接进来
-- 然后用streaming的方式消费,每一段时间的消费者相当于一个RDD

3    topic与broker    

消息目录,而broker是节点,每个kafka集群的服务器节点即是一个broker
-- topic可以理解为一个队列,先进先出
-- 一个broker可以有多个topic
-- 即是一个节点可以有多个目录"

4    zookeeper    

zookeeper集群不属于kafka内的组件
-- 但kafka依赖zookeeper集群保存meta信息    
5    kafka处理数据步骤    

    1、Producer产生消息,发送到Broker中
    2、Leader状态的Broker接收消息,写入到相应topic中
    3、Leader状态的Broker接收完毕以后,传给Follow状态的Broker作为副本备份
    4、Consumer消费Broker中的消息    
6    Consumer Group    

一个topic可以有多个CG    
用来实现一个topic消息的广播
-- 层级关系大概是:producer -> broker -> topic -> topic下有partition -> partition可以加入consumer group -> 每个consumer group中的consumer个数不同 -> topic的消息会复制到所有的CG
kafka组件之间的对应关系
-- 一个Topic可以由多个CG订阅
-- 多个CG之间是平等的
-- topic 和 CG是1对多
-- CG和consumer是1对多
-- topic和partition是1对多
-- consumer和consumer程序是一对一"    "CG的作用:
-- 配置两个consumer group,这两个consumer group用于消费同一个topic
-- 但做不同的处理任务"    "topic的消息会复制(不是真的复制,是概念上的)到所有的CG
-- 但每个partion只会把消息发给该CG中的一个consumer。
-- 如果需要实现广播,只要每个consumer有一个独立的CG就可以了。

7    Partition    

为了实现扩展性
-- 一个非常大的topic可以分布到多个broker(即服务器)上
-- 一个topic可以分为多个partition
-- 每个partition是一个有序的队列"    offset是partition中消息的序列号,但topic中的partition并没有序列号;    "分区算法:
-- broker会根据分区算法把消息存储到对应的分区中(一个分区存储多个消息)
-- 如果分区规则设置的合理,那么所有的消息将会被均匀的分布到不同的分区中,这样就实现了负载均衡"    "partition中的每条消息都会被分配一个有序的id(offset)。
-- kafka只保证按一个partition中的顺序将消息发给consumer
-- 不保证一个topic的整体(多个partition间)的顺序。

8    kafka组件详情  

 https://www.jianshu.com/p/1b657ac52f89         
9    Ambari Kafka使用  

 https://www.jianshu.com/p/0e8c5108452e    
10    pyspark streaming操作kafka  

 https://blog.csdn.net/chenyulancn/article/details/79420522         
-- 核心代码:user_data = KafkaUtils.createDirectStream(ssc,[topic],kafkaParams={""metadata.broker.list"":brokers})  
-- 通过kafka的消息生成RDD,然后实时处理RDD即可

11    kafka面试题 

   网址:https://zhuanlan.zhihu.com/p/76073581    

zookeeper重点知识

1    为什么要zookeeper

为分布式集群提供高可用的服务    
整体总结下,作用有两点:
-- 在主备节点之间选举主节点
-- 在发生宕机重启等意外情况时,使某个值达成一致,保证不论发生以上任何异常,都不会破坏决议一致性。

2    zookeeper在集群中的使用实例        

三种常见的ZK的leader应用:
-- 在kafaka集群中,通过Zookeeper管理集群配置,选举leader
-- 以及在consumer group发生变化时进行rebalance
-- Hadoop,使用Zookeeper的事件处理确保整个集群只有一个NameNode,存储配置信息等
-- HBase,使用Zookeeper的事件处理确保整个集群只有一个HMaster
-- 察觉HRegionServer联机和宕机,存储访问控制列表等.

3    zookeeper有两个类型的节点    

server -- 服务端
clients -- 客户端     
4    zookeeper的原理解析    
Zookeeper中的角色:
-- Leader:领导者,负责进行投票的发起和决议,更新系统状态
-- Learner:
    -- Follower:追随者接收客户请求并向客户端返回结果,在选主过程中进行投票
    -- Observer:观察者不参与投票,仅同步leader的状态。目的是为了扩展系统,提高读取速度。
-- Client:请求发起方,集群中,每个需要用到ZK的节点,都要安装ZK的客户端?
-- server : 每个节点都安装,最终某个server会被选为leader

Zookeeper中节点在工作过程中有三种状态:
-- LOOKING:当前Server不知道leader是谁,正在搜寻
-- LEADING:当前Server即为选举出来的leader
-- FOLLOWING:leader已经选举出来,当前Server与之同步
Zookeeper与客户端:

5    zookeeper使用流程理解
整体流程:
-- 1.在客户端向Follwer发出一个写的请求
-- 2.Follwer把请求发送给负责人
-- 3.Leader接收到以后开始发起投票并通知Follwer进行投票
-- 4.Follwer把投票结果发送给负责人
-- 5.Leader将结果汇总后如果需要写入,则开始写入同时把写入操作通知给负责人,然后提交;
-- 6.Follwer把请求结果返回给客户端
负责人是谁:
-- 我理解的负责人,是负责具体写任务的组件    

6    zookeeper选举算法解析  

 网址:https://blog.csdn.net/h2604396739/article/details/81104743    
7    zookeeper怎么对kafka的CG进行reblance    

ZK的watcher    
在0.9.0.0版本之前(<=0.8.2.2),Kafka的Consumer Rebalance方案是基于Zookeeper的Watcher来实现的。
-- 每个consumer group(cg)在zk下都维护一个”/consumers/[group_name]/ids”路径
-- 在此路径下,使用临时节点记录属于此cg的消费者的Id
-- 该Id信息由对应的consumer在启动时创建。
-- 还有两个与ids同一级别的节点,他们分别是:
   -- owners节点,记录了分区与消费者的对应关系(即:Topic A的Partition 0在Group G上实际由哪个Id的消费者负责消费);
   -- offset节点,记录了此cg在某个分区上的消费位置(即:Group G对Topic A的Partition 0实际现在消费到了第几的offset)。每个Broker、Topic以及分区在zk上也都对应一个路径:
-- /brokers/ids/[broker_id]:记录了该broker的host、port信息,同时还记录了分配在此Broker上的Topic的分区列表。
-- /brokers/topics/[topic_name]:记录了每个partition的leader、isr等信息。
-- /brokers/topics/[topic_name]/partitions/[partition_num]/stat:记录了当前leader、选举epoch等信息
每个consumer都分别在”/consumers/[group_name]/ids”和”/brokers/ids”路径上注册一个Watcher。
-- 当”/consumers/[group_name]/ids”路径的子节点发生变化时 
   -- 表示consumer group中的消费者出现了变化;
-- 当”/brokers/ids”路径的子节点发生变化时
   -- 表示Broker出现了增减。
-- 这样,通过Watcher,每个消费者就可以监听Consumer Group和Kafka集群的状态变化了。


        

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值