kafka
1. 基础概念
1.1 特性
1. 高吞吐量、低延迟: 每秒处理10^5级别条消息,采取partition、consumer group特性,先写入os层面的页缓存中,继而磁盘化。
2. 可扩展性:支持集群
3. 容错性:若集群中的副本数量为n,则允许n-1个节点失败
4. 高并发:支持若干个客户端同时读写。
1.2 组件
Producer:消息的生产方 Consumer:消息的消费方
Broker:物理概念,表示集群中的机器 Topic:消息的主题
Partition:物理层面上的分组,决定并发处理能力,但同时会增加延迟(数据寻址延迟)
Leader: 首领 Follower:从者 Replication: 副本 message: 消息实体 offset: 地址偏移量
Controller: 集群中承担broker的主从的选举工作,用于管理和协调集群
可以用户自定义分区,否则根据cluster和topic和key决定分区
降低耦合
异步通信
削峰和缓冲
Isr osr ar
https://zhuanlan.zhihu.com/p/89294602
2. 架构
2.1 Producer
流程2.2 Consumer
流程3. 集群
集群配置
4. 源码
4.1 集成Spring/Spring-Boot
借助spring-boot-autoconfigure自动化配置,借助annotation(@EnableKafka)实现ContainerFactory和FactoryContainerConfigurer的单例化,继而引发kafka-client中的KafkaProducer和KafkaConsumer的实例化完成相关消息的推送和使用。
连接方式使用NIO的sendfile方式实现内存零复制
自定义Selector, channel的创建,基于配置进行连接,以及消息发送的统筹调度
4.x 架构特性:
1. DefaultKafkaProducerFactory存有producer的缓存池BlockingQueue,内存内置类CloseSafeProducer的实例。值得注意的是该Producer内有指针指向该缓存池对象,做到了该Producer的释放实现是放回缓存池中。优点良好的封装特性,实现逻辑较为简单且对外暴露新建和回收方法如同一般资源,便于理解。
spring-kafka结合spring-boot快速配置进行consumer和producer的使用。
annotation: @EnableKafka,@KafkaHandler,@KafkaListener,@TopicPartition,@PartitionOffset
负责ConcurrentKafkaListenerContainerFactoryConfigurer和ConcurrentKafkaListenerContainerFactory的单例化
producer: KafkaTemplate进行写
利用KafkaProducerFactory(DefaultKafkaProducerFactory)进行KafkaProducer的注入。
consumer: MessageListener进行读取
实现方式有KafkaMessageListenerContainer和ConcurrentMessageListenerContainer