kafka--开源的分布式事件流平台;其应用场景一般是在生产者的生产速度远远大于消费者的消费速度时会用到kafka的消息队列机制;
kafka的核心组件包括:kafka服务--(Broker是server的实例)用来维护整个集群的正常运行、生产者--producer用来生产数据,数据的发布者、消费者--consumer用来消费数据,数据的订阅者、主题--topic不同的消息通过topic来区分、Zookeeper--集群依赖,保存元数据。groupconsumer--消费者组。
consumer与topic的关系:
- 多个consumer可以组成一个消费者组group
- topic中的某条数据只会被订阅的group中某一个consumer消费,不能同时被多个consumer消费
- 同样的一个分区中的消息也只能有一个consumer(同时)消费
- 一个组中同时接收消息的consumer不能多与分区数
- consumer消费的顺序只能保证在partition中有序
消费者组的作用:
将多个consumer划分为一个组,每个组消费的数据是一样的,组内成员共同消费topic中的信息,组内成员不能重复消费;这样做可以提高消息并发和消息的容错性;
consumer实现负载均衡的算法:
可以理解为hash取摩,底层算法:
- 获取起始分区数
- 获取分区总数
- 利用这两个值,截取每个consumer的分区
consumer消费信息的机制:
- 每个consumer都会记住自己的偏移量offset,并在zookeeper中注册,zookeeper会记录每个consumer的分区信息,一旦挂掉,运行负载均衡
flume与kafka的区别:flume是信息的采集与汇总,不能存储数据;kafka则是信息收集并存储数据
producer的消息分发机制:
- broker中记录有meta信息,并提供给producer,
- producer通过心跳机制与topic中的所有partition leader保持联系,
- producer将消息发送给broker,消息备分发到哪个分区与producer端决定,一般通过random,key-hash,等方法实现负载均衡
- 也可以自定义分发方式
kafaka的核心API:
- Producer API
- consumer API
- Streams API
- Connect API
- Admin API