作者:k3as0n_701 | 来源:互联网 | 2023-08-29 20:22
项目中对kafka有所使用,但一直都是根据公司内部wiki提供的demo来写的,对kafka有一定了解,但是可能不够系统,全面;于是最近找时间浏览了一下官网对kafka的介绍,翻译如下:
一句话概括kafka
kafka是一个具备很强容错能力和实时处理能力的分布式流数据平台。
kafka的应用场景
kafka可在以下场景中应用:基于流数据的发布订阅消息系统、基于流数据的高效异步通信中间件、基于流数据的高可用分布式存储;可以替代传统的消息队列和企业级消息系统;
核心API
核心API有四类:
生产者API
一般生产者发布数据到topic(后面会介绍topic),
消费者API
消费(处理)发布到topic的数据
流API
(暂时没研究明白,这里先跳过,后面的文章继续写)
连接API
用于kafka和其他系统如mysql、mogodb、hbase等进行数据交互;
通信协议
客户端与服务器的通信使用的是基于TCP的简单,高效的并且与语言无关的TCP协议!
主题和日志
一个主题(topic)就是一类数据或者记录的名字;主题支持多个订阅者订阅,即一个主题可以被零个,一个或者多个消费者消费,处理;
一个主题会被分成好多个partition,每一个partition维护着一个log;主题中每一个partition的记录都有一个顺序的ID 记作:offset 偏移量;
kafka集群记录了所有发布的消息(记录),无论是否被消费(有一种配置保留时长的机制);实际上唯一的元数据保留在消费者那里,元数据仅仅记录了消费者在partition的便宜量,或者消费记录的ID;这样以来,消费就可以由消费者自己控制。消费者可以设置这个偏移量。
主题被分为patition的意义在于两方面:一个是数据横向扩展行,另一个是消费的并发性能的提升;
每一个partition的数据在kafka集群中都是有备份的。每一个partition都有一个server作为leader,其他的作为follower;leader负责读写请求,follower负责同步leader的数据; 每一个服务器都扮演一个或多个partition的leader角色,和一些个partition的follower角色,有利于负载均衡。