????????首先我们要将外部数据导入到集群,首先在main线程中创建producer 对象,调用send方法发送数据,拦截器为可选项,通过序列化器对数据序列化,因为需要跨节点通讯,分区器会对每个数据进行分区,发送到指定分区;
? ? ? ? 所谓的分区其实是一个缓存队列(双端队列),队列大小为32m,Batchsize为16k,Batchsize装满之后,或者lingerms时间到了,sender线程就来主动拉取数据;
? ? ? ? 发送到集群后,如果没有及时应答,队列能缓存5个请求,selector负责打通底层链路,集群收到数据后进行一个副本的同步,同步完成后进行应答,应答级别有三种:
? ? ? ? 0:生产者发送过来数据,不需等待数据落盘;
????????1:生产者发送过来数据,需等待leader数据落盘应答;
? ? ? ? -1:生产者发送过来数据,需等待leader数据和所有的follower数据落盘应答;
????????若应答成功,清理请求,清理分区(双端队列)里的数据,若没有成功,再不断地重试发送,直到成功。