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 清理数据,一个日志文件分为多个日志段,消息只能写到当前最新日志段,写满后切分新的日志段,并保存老的日志段。

有定时任务定期检查老的日志段是否可以删除。