kafka基础架构:
1.一个topic分为多个partition,若干个分区在一个主机服务器里
2.配合分区的设计,提出消费者组的概念,组内每个消费者并行消费。。并且一个分区的数据只能由同组的一个消费者来消费。
3.为提高可用性,每个partition增加若干副本(分为leader和follow,无论是生产还是消费,都针对leader而言)。
生产者--》kafka集群服务器
1.生产者生产数据,创建一个main线程,经过拦截器,序列化器,分区器,数据根据分区器规则,进入不同的DQuene缓存队列:(内存中)(每一个队列大小默认32m)(每一批次数据大小batch.size16k)
缓存队列通常使用异步发送:外部数据发送到缓存队列中,不管缓存队列中的数据是否发送完成,外部数据会持续发往缓存队列。
2.创建Sender线程拉取数据:
拉取规则:1.数据积累到batch.size,也就是16k 2.时间到达linger.ms ,默认0s。两者满足其中一个就会拉取数据
拉取数据时,根据分区的不同,将一批数据放入到队列中,进行发送
3.数据发送往服务器,首先会请求服务器,如果服务器没有应答则最多发送五次请求。如果应答成功,执行4
4.selector连通缓存队列与kafka集群服务器,集群收到之后,进行副本同步。
集群还会应答selector,通过acks方式,应答有三种级别。
应答acks 0:生产者发送数据,无需等待数据落盘
1:生产者发送数据,leader应答即可
2:生产者发送数据,需要leader和所有副本都应答
5.应答成功,清除请求和缓存队列中的数据。如果应答失败,进行重试,默认次数为int的最大值



