1、kafka应用场景
基于流数据的发布订阅消息系统、实时流数据的高效异步通信、基于流数据的高可用分布式存储!
不同的系统之间实时流数据管道;
2、官方一句话概括
kafka是一个分布式流数据平台:可以被用作消息队列,企业级消息系统,具备很强的容错能力;实时处理的能力;
3、kafka的使用
一般都是以集群的形式部署在一台或者多台服务器上;消息记录(数据)根据主题(topic)进行分类;每个记录都有一个key value 和时间戳;
4、核心API
生产者API发布数据(记录)到一个或者多个topic;消费者API可以订阅一个或者多个主题,并处理生产到这些主题的数据;流API,即将数据按照流数据进行处理;连接API,可以创建可复用的生产者和消费;
5、通信协议
客户端与服务器的通信使用的是基于TCP的简单,高效的并且与语言无关的TCP协议!
6、主题和日志
一个主题(topic)就是一类数据或者记录的名字;主题支持多个订阅者订阅,即一个主题可以被零个,一个或者多个消费者消费,处理;
一个主题会被分成好多个partition,每一个partition维护着一个log;主题中每一个partition的记录都有一个顺序的ID 记作:offset 偏移量;
kafka集群记录了所有发布的消息(记录),无论是否被消费(有一种配置保留时长的机制);实际上唯一的元数据保留在消费者那里,元数据仅仅记录了消费者在partition的便宜量,或者消费记录的ID;这样以来,消费就可以由消费者自己控制。消费者可以设置这个偏移量。
主题被分为patition的意义在于两方面:一个是数据横向扩展行,另一个是消费的并发性能的提升;
每一个partition的数据在kafka集群中都是有备份的。每一个partition都有一个server作为leader,其他的作为follower;leader负责读写请求,follower负责同步leader的数据; 每一个服务器都扮演一个或多个partition的leader角色,和一些个partition的follower角色,有利于负载均衡。
7、生产者
生产者向一个或者多个topic写数据,并且负责每个记录分配到哪一个分区上;
8、消费者
消费者的标签是消费者组,在一个同一个消费者组里的消费者是等价的。这样提高消费者的处理能力,和容错性。
主题的partition会被分配到消费者实例上,并且是动态分配的,当消费者增加活者减少时,都会导致一些partiton重新分配。每个partiton内的记录都是有序的,但是不同partition记录消费可能是无序的。
要想整体有序,只能一个topic对应一个partion 并且每个消费者组里面只能有一个消费者。
9、kafka可保证的几点
单个partition的记录ID与记录接收时间是有序的,ID越大,接收时间越迟。
一个topic被复制N份,那么N-1个服务器挂掉之后,对数据是不会有影响的