首页 > 代码库 > kafka学习总结之kafka简介

kafka学习总结之kafka简介

kafka是一个分布式,基于subscribe-publish的消息系统

特性:高吞吐量、低延迟、可扩展性、持久性(消息持久化到本地磁盘)、可靠性、容错性(n个副本,允许n-1个节点失败)、高并发(支持数千个客户端同时读写)

设计思想:

(1)       Consumer group:多个consumer可以组成一个group(group-id区分),每个消息只能被组中的一个consumer消费,同时消费一个消息的consumer一定不在同一组;

(2)       消息状态:kafka中,消息的状态被保存在consumer中,节点(broker)不关心什么消息被谁消费了,只保存偏移量(指向partition,即分区中下一个即将被消费的消息);

(3)       消息的保存:消息会被持久化到本地磁盘中,而且可以(可配置)长期保存,以便consumer可以多次消费;

(4)       批量发送:kafka支持以消息集合为单位进行批量发送,从而提高效率

(5)       异步:producer只管向broker push消息,consumer只管从broker pull消息,这个过程是异步的,不存在谁等谁;

(6)       集群:kafka集群中的broker地位相同,没有主从关系,可以随意增加或删除任何一个broker,kafka0.8.x通过metadataAPI进行负载均衡,kafka0.7.x主要靠zookeeper进行负载均衡;

(7)       分区partition:kafka的broker支持消息分区,producer决定将消息发送到哪个分区,分区中消息的顺序即是producer发送的顺序,一个主题可以有多个分区。

架构组件:

topic:主题,kafka中发布订阅的对象

producer:向topic发布消息的一端

consumer:从topic订阅消息的一端

broker:kafka的一个服务实例,即是一个kafka服务器

技术分享 

图 1 kafka集群结构图

         topic和partition

         一个topic有多个partition,每个partition中的消息都是有序的,kafka的节点broker会维护一个消息的偏移(index)唯一确定一个消息

技术分享 

图 2 topic和partition关系图

kafka学习总结之kafka简介