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关系图