kafka是分布式流处理平台,可以对流式记录发布和订阅、存储、立即处理等。
基本概念
- producer:消息生产者
- consumer:消息消费者
- consumer group:消费者组,一个消费者组包含一个或多个消费者实例,便于扩展和容错。如果所有的消费者在同一个消费者组中,消息记录会负载均衡到每一个消费者实例;如果所有消费者实例在不同的消费组中,每条消息会广播到所有消费者进程。
- broker :kafka服务器,kafka集群就是由多个broker组成。一个broker可以容纳多个topic。
- topic:数据主题。kafka保留所有发布的记录,无论是否被消费,数据保留期限可配置。kafka只保证分区内记录是有序的,不保证主题中不同分区的顺序。
-
partition:分区。一个topic可以分布在多个broker,一个topic可以分为多个partition,每个partition为一个队列。便于扩展。分区由一个leader和多个follower组成,生产者和消费者操作的都是leader,follower负责同步leader,在leader发生为故障时,从中选举出新的leader。一个partition只能被消费者组的一个消费者所消费,但是过个消费组可以消费同一个partition。
四大核心API
- producer api发布消息 到一个或多个topic
- consumer api订阅一个或多个topic,并处理产生的消息
- streams api允许应用程序充当处理器,从一个或多个topic获取输入流,并向一个或多个topic产生输出流。
- connector api允许构建可重用的生产者或消费者,将kafka topic连接到已存在的应用程序或数据系统。比如连接到一个关系数据库,捕捉表的所有变更。
kafka的作用
a. 数据缓冲,保证下游消费数据速度稳定;
b. 解耦和扩展,消息队列可以作为接口层,只要遵循规范,上下游可以随意扩展;
c. 冗余和健壮性,消息可以保存为多个副本,多个下游服务可以消费同一信息;
d. 异步通信,消息消费速度根据消费者决定,下游服务可以在需要的时候再去处理它。
kafka 消息发送机制
producer将消息序列化后,经过分区处理器处理,决定发到对应topic的对应分区,最后将消息发送到客户端的消息缓冲池,消息缓冲池默认最大值为32M,交由一个sender线程进行消息发送。消息在缓存池会分为一个个把它分成,每个batch默认16kb,消息一旦满足该大小或超过最大空闲时间,会被发送到broker。producer可以配置消息重发次数,由于网络抖动等原因,消息可能会重新进行发送。