数据发送流程:需要两个线程面main线程和sender线程
发送过程:
1、生产者生产数据之后,数据通过拦截器,序列化器,分区器,发送到线程共享变量RecordAccumulator(默认大小为32M,参数名:buffer.memory)
2、当线程共享变量中的一批数据量达到16k(默认batch.size)或者达到linger.ms(默认为0,单位为ms)时,Sender线程会向RecordAccumulator中拉取数据。
3、根据sender中NetWorkClient接收到的不同broker的请求,通过sender上的selecter将对应的数据发送到对相应的Broker上,注意NetWorkClient对于每个broker发送的请求最多保存5个
4、当Broker上的leader和follower接收到数据之后返回一个ack应答,该ack共有三个界别:0,1,-1(all)
5、若sender迟迟未收到ack则会将数据重新发送(重试的次数默认为int的最大值,参数名:retries),两次重试间隔100ms
6、如果数据发送成功,sender将会清理掉NetWorkClient中已完成的请求,并将RecordAccumulator中对应的数据也清理。
发送流程图