一、Kafka简介
1、Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。Kafka主要特点是基于Pull的模式来处理
消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、
丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。
2、Kafka的性能是最高,它强调高性能,能在廉价的服务器上,也能支持单机每秒100K条数据的吞吐量,Kafka的高性能读写主要
是基于Linux操作系统底层的PageCache,PageCache虽不用内存但胜似内存,而且Kafka完全不需要内存和磁盘数据同步的
烦恼,所以Kafka的生产者、消费者的读写完全是基于内存。
二、Kafka基本概念(从物理概念和逻辑概念分析)
1、Producer:消息和数据的生产者,向Kafka的一个topic发布消息的进程、代码、服务
2、Consumer:消息和数据的消费者,订阅数据(Topic)并且处理其发布的消息的进程、代码、服务
3、Consumer Group:逻辑概念,对于同一个topic,会广播给不同的group,一个group中,只有一个Consumer
可以消费该消息
4、Broker:物理概念,Kafka集群中的每个Kafka节点
5、Topic:逻辑概念,Kafka消息的类别,对数据进行分区、隔离
6、Partition:物理概念。Topic物理上的分组,一个Topic数据,会被分散存储到多个Partition,每一个Partition是有序的。
7、Segment:Partition物理上由多个segment 组成,每个segment存着message信息
8、message:Kafka发送消息的基本单位
9、payload:是message中的一部分,相当于value
10、Replication:同一个Partition可能会有多个Replica,多个Replica之间数据是一样的
11、Replication Leader:一个Partition的多个Replica上,需要一个Leader负责该Partition上与Producer和Consumer交互
12、ReplicaManager:负责管理当前broker所有分区和副本的信息,处理KafkaController发起的一些请求,副本状态的切换、
添加、读取消息等
三、Kafka基本概念延伸
1、Partition
1)每一个topic被切分为多个Partitions
2)消费者数目少于或者等于Partition的数目(设计之初是为了避免多个消费者重复消费一个Partition的数据)
3)Broker Group中的每一个Broker保存Topic的一个或多个Partitions
4)Consumer Group中的仅有一个Consumer读取Topic的一个或多个Partition,并且是唯一的Consumer(和2)对应)
2、Replication
1)当集群中有Broker挂掉的情况,系统可以主动的使Replicas提供服务
2)系统默认设置每一个Topic的Replication系数为1,可以在创建Topic时单独设置
3)Replication特点
--Replication的基本单位是Topic的Partition
--所有的读和写都从Leader进,Followers只是作为备份
--Follower必须能够及时复制Leader的数据
--增加容错性和可扩展性