kafka是什么?
Apache Kafka 是一款开源的消息引擎系统(支持可重用、通用的传输消息中间件)。
支持以下模型:
1.点对点(一对一)。2.发布/订阅(多对多)。
同时也是分布式流平台。用于处理两类问题:
1.数据正确性不足。数据收集轮询的间隔时间是一个高度经验化的问题。
2.系统高度定制化(每个子系统对接数据收集模块),维护成本高。
所以kafka 0.10.0.0有如下特征:
1.提供一套API实现生产者和消费者。2.降低网络传输和磁盘存储开销。3.实现高伸缩性架构。
kafka对比其他流式计算框架优势:
1.更容易实现端对端的正确性(Correctness),即精确处理一条消息有且只有一次机会影响系统状态。
2.对于流式计算的定位,提供一套搭建实时流式处理的库,而非一个完整系统。Kafka 提供类似于集群调度、弹性部署等开箱即用的运维特性
为何需要消息引擎?
数据量不大,可以考虑上游限流,但这就导致上游无法达到更高tps。
所以用消息引擎来消峰填谷,由于上游应用处理请求简单,瞬间tps可以很高,但下游处理复杂,就会出现下游无法及时处理上游数据导致堆积,甚至压垮下游服务。
kafka专业术语概念
Topic(主题):一类数据的总称。
Kafka Broker(Broker服务端进程):负责接收和处理客户端发生来的请求,对消息持久化;一个kafka消息引擎集群,由多个Broker组成。
Producer(生产者):向Topic发送消息的客户端应用。
Consumer(消费者):订阅Topic消息的客户端应用。
Replica(副本):备份机制(Replication)中,相同的数据拷贝;
分为Leader Replica(领导者副本:对客户端(consumer、producer)提供服务) 和Follower Replica(追随者副本:主动请求同步领导者副本的数据)。
注意一些概念:数据库Mysql的主从模式:从是可以提供读服务的。而kafka是主备含义。
Partition(分区):kafka实现Scalability(伸缩性)的机制。避免leader replica积累太多数据,以至于一个broker无法容纳了。
把一个Topic分为多个Partition。实际上副本是对于分区来说的,每个分区下可以配置若干副本。
Offset(位移):从0开始,针对分区,一旦写入分区则不会变化。
Consumer Group(消费者组):多个consumer组成一个组消费一组主题。主题每个分区只能被组内一个consumer消费。以实现同时消费这个Topic,提高吞吐。如某个consumer挂掉,会把这个挂掉的consumer负责的分区转移给其他存活的consuemr,这个过程叫ReBalance。
Consumer offset是随时变化的,表示消费进度。
Kafka持久化数据
使用消息日志(Log),即磁盘的一个只能追加写(Append-only)消息的物理文件。追加写用顺序IO避免缓慢随机IO。
使用Log Segment 清理数据,一个日志文件分为多个日志段,消息只能写到当前最新日志段,写满后切分新的日志段,并保存老的日志段。
有定时任务定期检查老的日志段是否可以删除。