大数据系列——Kafka理论

概述

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。

是一种高吞吐量的分布式发布订阅消息系统,以容错的方式记录消息流,以文件的方式来存储消息流,它可以处理消费者在网站中的所有动作流数据(包括网页浏览,搜索、功能统计等行为)。

Kafka的目的是通过集群来提供实时的消息消息管道和消息处理。

消息系统一般有两种应用模式:1、队列;2、发布订阅,显然kafka属于第二种。

下面从如下几个方面介绍下其相关理论:

目录

概述

架构

核心知识点:

部署方式:

优缺点分析

缺点:

常见应用场景:

调优经验:

API应用:


架构

核心知识点:

1Zookeeper

kafka集群依赖zookeeper来保存集群的的元信息,来保证系统的可用性。

2Broker

处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群,整个集群可运行在一个或多个(可跨不同数据中心)服务器上。

3Message

消息,每一条发送的消息主体。

4Topic

消息主题,Kafka根据topic对消息进行归类,kafka的数据就保存在topic,发布到Kafka集群的每条消息都需要指定一个topic。

5Partition

topic的分区,对topic从物理上进行分组,每个topic可以有多个分区,其数据被分散存储到多个partition。同一个topic在不同的分区的数据是不重复的,每个partition是一个有序队列,表现形式就是一个一个的文件夹!

在写入数据到topic时:(支持自定义分区,通过覆盖Partitioner下的 configure 和 partition 方法,实现自定义选择分区逻辑)

PS

1)、没有设置key的消息就会被轮训的发送到不同的分区。

2)、设置了key,kafka自带的分区控制,会根据key计算出来一个hash值,这个hash值会对应某一个分区。如果key相同的,那么hash值必然相同,key相同的值,必然是会被发送到同一个分区。

6Segment

分区的数据段,partition物理上由多个segment组成,每个segment存着message信息。

每个Partition都会对应一个日志目录:{topicName}-{partitionid}/,在目录下面会对应多个日志分段(LogSegment)。LogSegment文件由三部分组成,分别为“.index”文件、“.log”文件、.timeindex文件(早期版本中没有),log文件就实际是存储message的地方,而index和timeindex文件为索引文件,用于检索消息。

索引文件使用稀疏索引的方式,避免对日志每条数据建索引,节省存储空间。kafka就是利用分段 + 索引的方式来解决查找效率的问题。

其中每个.log文件默认大小为1G,文件的命名是以该segment最小offset来命名的,如x.log,x.index,x.timeindex, 其中x取值为0到368795之间。

7Replication:

分区的副本,包括主分区(Leader)和备份分区(Follower),同一个partition可能会有多个Replication,多个副本之间的数据是一样的。

副本的作用是做备份,当主分区(Leader)故障的时候会选择一个备份(Follower)上位,成为Leader。

在kafka中默认副本的最大数量是10个,且副本的数量不能大于Broker的数量,follower和leader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本(包括自己)。

8ISR

同步副本集合(in-sync replicas),每个分区的元数据信息都存储在一个ISR集合里。 在该集合里的副本具有如下特点:

a、每一个副本都与leader保持同步

b、才有资格被选举为leader

c、提交到kafka的消息只有该集合中的副本都接收到才认为“已提交”成功。

9offset:

记录偏移量,最大值为64位的long大小(0到2^64 -1),Kafka通过offset保证消息在分区内的顺序,offset的顺序性不跨分区。Kafka0.10以后,使用一个专门的topic __consumer_offset保存offset。__consumer_offset日志留存方式为compact,也就是说,该topic会对key相同的消息进行整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值