二:kafka生产者

一:简介

  1.相比较消费者、协调者、控制器、日志存储而言,生成者的功能相对较简单,因大部分的工作都交给Broker来处理,生产者需要关注的是消息提交失败、消费者反馈的失败的处理上面;

  2.生产消息的流程:消息放入队列中、由消息发送线程拉取消息、批量发送给Brokers;

  3.生产程序KafkaProducer;

  4.消息收集器,RecordAccumulator,负责缓存生产者客户端产生的消息;

  5.发送线程:负责读取RecordAccumulator的批量消息,通过网络发送给Brokers;

二:

   1.同步方式,异步方式

     同步方式的缺点是需要等待,因为Brokers的主备副本需要同步完成,才会返回成功;

     异步可以传递回调方法来处理,使用异步一定要有手段能感知错误;

   2.消息发送的方式

     消息没有key的时候,采用轮询的方式;有key的时候,散列后发放,这样尽可能保证分区的数据均匀;

     消息发往哪个分区,是由生产者客户端决定的;

  3.分区的结构

    分区编号,主副本,副本集,同步副本集;

  4.RecordAccumulator和batch.size、linger,大小和时间;

  5.发送线程的工作,合并分区的消息、提交给网络连接对象;

三:客户端网络连接对象

  1.NetworkClient管理客户端和服务端的通信,包括连接简历、发送请求、读取响应;

2.发送请求:请求队列、上条处理后,下条发送;

3.轮询、调用响应函数,执行回调函数;

4.采用java NIO来处理和不同节点的交互;

   SocketChannel 客户端网络连接通道,底层字节数据的读写都在通道上;

   Buffer,和通道一起用,写入缓冲区,从缓冲区中读;

   Selector选择器,这是比较常用的,从select、epoll到 NIO、netty等都在用,目的是为了提高效率;

    SelectionKey,关联选择器和通道;

5.客户端具体步骤

选择器的 connect()方法会 创 建客户端到指定远程服务器的网络连接,选择器监听到客户端的读写事件,会根据SelectionKey获取相应的通道,利用缓冲区读写;

选择器上调用轮询方法,不断的注册事件、执行事件处理、取消事件,客户端发送请求,接收结果;

6.服务端的步骤

Broker的服务端也是使用NIO的网络服务,它启动一个接收线程Acceptor和多个处理器Processor,将连接部分和请求部分使用不同的线程来处理,这样请求的处理不会阻塞不断到来的连接;

a)处理器Processor接收从客户端发送的对象,包装成Request,放入请求通道的请求队列;

b)服务端通过处理器中的选择器Selector的轮询,获得客户端的请求,并交于KafkaApis去处理;

c)Apis处理完成后,会创建响应对象,并放入请求通道的响应队列;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值