一.基本概念
1.Producer:消费和数据的生产者,向kafka 的topic 发布消息的进程/代码/服务
2.Consumer:消息和数据的消费者,订阅数据(Topic)并且处理其发布的消息进程的进程/代码/服务
3.Comsumer Group : 逻辑概念,对于同一个topic,会广播给不同的group,一个group中,只有一个consumer可以消费改消息
4.Broker:物理概念,kafka集群中的每个kafka 节点
5.Topic:逻辑概念,kafka消息的类别,对数据的区分,隔离
6.Partition:物理概念,kafka 下数据存储的基本单元。一个Topic 数据,会被分散存储到多个partition,每一个partition是有循序的
7.Replication:同一个Partition 可能会有多个Replica,多个Replica之间数据是一样的。
8.Replication leader : 一个partition 的多个Replica 上,需要一个leader 负责改partition上与Producer和Consumer交互.
9:ReplicationManager 负责管理 当前broker所有分区和副本的信息,处理KafkaController发起的一些请求,副本状态的切换,添加/读取消息等等
二.概念延伸
1.Partition
1.1每一个topic被切分为多个partitions
1.2消费者数目小于或者等于partition的数据
1.3Broker Group 中的每一个Broker保存Topic的一个或者多个Partitions
1.4Consumer Group 中的仅有一个Consumer读取topic的一个或者多个Partitions,并且是唯一的Consumer.
2.Replication
2.1当集群中有Broker挂掉的情况,系统可以主动的使Replicas提供服务
2.2系统默认设置每一个topic的replication 系数为1 ,可以在创建topic 时单独设置
2.3基本单位是Topic 的Partition
2.4所有的读和写都是从leader 进,followers 只是作为备份
2.5 follower 必须及时复制leader的数据
2.6增加容错和可扩展性
三.基本结构
1.简介
在kafka 官网给出图解是这样的(http://kafka.apache.org/intro.html)
1.Kafka has four core APIs:
1.1 The Producer API allows an application to publish a stream of records to one or more Kafka topics.
1.2 The Consumer API allows an application to subscribe to one or more topics and process the stream of records produced to them.
1.3 The Streams API allows an application to act as a stream processor, consuming an input stream from one or more topics and producing an output stream to one or more output topics, effectively transforming the input streams to output streams.
1.4 The Connector API allows building and running reusable producers or consumers that connect Kafka topics to existing applications or data systems. For example, a connector to a relational database might capture every change to a table.
下面这张图更好的展示了kafka 作为消息队列模式的运作
2.kafka 的消息结构
2.1 Offset 记录当前消息的偏移量
2.2 Length 记录整个消息有多长
2.3 CRC32 kafka 的一个校验字段来检验当前信息的完整性,避免数据不完整导致异常
2.4 Magic 一个固定的字段 kafka 可以非常快速的判断这个消息是不是kafka 的消息。如果不一致直接舍弃。
2.5 attributes 放当前消息的一些属性,会有一个枚举值
2.6 Timestamp 当前消息的一个时间戳
2.7 Key Length-> key 的长度
2.8 Key ->key 的内容
2.9 Value Length-> value 的长度
2.8 value ->value 的内容
四.特点
1.分布式
1.1 多分区
1.2 多副本
1.3 多订阅者
1.4基于zookeeper 调度
2.高性能
2.1 高吞吐量
2.2 低延时
2.3 高并发
2.4 时间复杂度 O(1)
3.持久性和扩展性
3.1 数据可持久化
3.2 容错性
3.3 支持在线水平扩展
3.4 消息自动平衡