Kafka详解

1、Kafka介绍

Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。
Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高吞吐量、低延迟的平台。
Kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。
Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。
无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性
2、消息队列的作用
消息系统的核心作用就是三点:解耦,异步和并行
以用户注册的案列来说明消息系统的作用
2.1 用户注册的一般流程

问题:随着后端流程越来越多,每步流程都需要额外的耗费很多时间,从而会导致用户更长的等待延迟。
2.2 用户注册的并行执行

问题:系统并行的发起了4个请求,4个请求中,如果某一个环节执行1分钟,其他环节再快,用户也需要等待1分钟。如果其中一个环节异常之后,整个服务挂掉了。

2.3 用户注册的最终一致

1、保证主流程的正常执行、执行成功之后,发送MQ消息出去。
2、需要这个destination的其他系统通过消费数据再执行,最终一致。

3、kafka与传统消息系统的区别
3.1、在架构模型方面
RabbitMQ遵循AMQP协议,RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consumer循环从输入流读取数据)。rabbitMQ以broker为中心;有消息的确认机制。
kafka遵从一般的MQ结构,producer,broker,consumer,以consumer为中心,消息的消费信息保存的客户端consumer上,consumer根据消费的点,从broker上批量pull数据;无消息确认机制。
3.2、在吞吐量
kafka具有高的吞吐量,内部采用消息的批量处理,zero-copy机制,数据的存储和获取是本地磁盘顺序批量操作,具有O(1)的复杂度,消息处理的效率很高。
rabbitMQ在吞吐量方面稍逊于kafka,他们的出发点不一样,rabbitMQ支持对消息的可靠的传递,支持事务,不支持批量的操作;基于存储的可靠性的要求存储可以采用内存或者硬盘。
3.3、在可用性方面
rabbitMQ支持miror的queue,主queue失效,miror queue接管。kafka的broker支持主备模式。
3.4、在集群负载均衡方面
kafka采用zookeeper对集群中的broker、consumer进行管理,可以注册topic到zookeeper上;通过zookeeper的协调机制,producer保存对应topic的broker信息,可以随机或者轮询发送到broker上;并且producer可以基于语义指定分片,消息发送到broker的某分片上。

4、kafka的架构模型
基于producer consumer topic broker 等的一个基本架构
角色介绍:
1.producer
生产者,他会把数据源写入到kafaka集群中
2.broker
一个broker就是kafaka集群的节点,可以存放数据
3.topic
消息的主题,它是一类消息的集合
4.partition
分区概念: 也就是说一个topic有多个分区
一个分区里面有一个segment,segment里面有一个.log文件,还有一个.index文件
5.replication
副本: 一个分区可以设置多个副本,副本保证数据的安全性
6.segment
每一个分区数据都有一个segment,一个segment里面有2个文件,一个是.log文件,它是topic数据存储的文件,还有一个文件叫.index文件,它是.log文件索引文件
7.zookeeper
通过zk保存kafka集群元数据信息,这些元数据信息包括:kafa集群地址、有哪些topic,以及每一个topic的分区数等等信息
8.consumer
消费者
消费者去kafka集群中拉取数据然后进行消费
9.offset
消息的偏移量
保存消息消费到哪里了,它会把消息消费打的数据记录,当前这个记录信息叫做offset偏移量
消息的偏移量有两种保存方式:
第一种:可以kafka自己去保存
第二种:有zk保存

5、kafka的组件介绍
Topic :消息根据Topic进行归类
Producer:发送消息者
Consumer:消息接受者
broker:每个kafka实例(server)
Zookeeper:依赖集群保存meta信息。
Topics组件介绍
Topic:一类消息,每个topic将被分成多个partition(区),在集群的配置文件中配置。
partition:在存储层面是逻辑append log文件,包含多个segment文件。
Segement:消息存储的真实文件,会不断生成新的。
offset:每条消息在文件中的位置(偏移量)。offset为一个long型数字,它是唯一标记一条消息。
partition
1、在存储层面是逻辑append log文件,每个partition有多个segment组成。
2、任何发布到此partition的消息都会被直接追加到log文件的尾部。
3、每个partition在内存中对应一个index列表,记录每个segment中的第一条消息偏移。这样查找消息的时候,先在index列表中定位消息位置,再读取文件,速度块。
4、发布者发到某个topic的消息会被均匀的分布到多个part上,broker收到发布消息往对应part的最后一个segment上添加该消息。

partition分布
1、partitions分区到不同的server上,一个partition保存在一个server上,避免一个server上的文件过大,同时可以容纳更多的consumer消费,有效提升并发消费的能力。
2、这个server(如果保存的是partition的leader)负责partition的读写。可以配置备份。
3、每个partition都有一个server为"leader",负责读写,其余的相对备份机为follower,follower同步leader数据,负责leader死了之后的接管。n个leader均衡的分散在每个server上。
4、partition的leader和follower之间监控通过zookeeper完成。

segment
1、每个segment中存储多条消息,消息id由其逻辑位置决定,即从消息id可直接定位到消息的存储位置,避免id到位置的额外映射。
2、当某个segment上的消息条数达到配置值或消息发布时间超过阈值时,segment上的消息会被flush到磁盘,只有flush到磁盘上的消息订阅者才能订阅到
3、segment达到一定的大小(可以通过配置文件设定,默认1G)后将不会再往该segment写数据,broker会创建新的segment。

offset
offset是每条消息的偏移量。
segment日志文件中保存了一系列"log entries"(日志条目),每个log entry格式为"4个字节的数字N表示消息的长度" + “N个字节的消息内容”;
每个日志文件都有一个offset来唯一的标记一条消息,offset的值为8个字节的数字,表示此消息在此partition中所处的起始位置.
每个partition在物理存储层面,有多个log file组成(称为segment).
segment file的命名为"最小offset".log.例如"00000000000.log";其中"最小offset"表示此segment中起始消息的offset.

6、kafka的安装
6.1三台机器安装zookeeper
注意:安装zookeeper之前一定要确保三台机器时钟同步
*/1 * * * * /usr/sbin/ntpdate us.pool.ntp.org;
三台机器配置文件修改
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/export/servers/zookeeper/data
clientPort=2181
autopurge.purgeInterval=1
autopurge.snapRetainCount=3
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

三台机器分别在/export/servers/zookeeper/data 目录下添加文件myid,并编辑每个文件中的内容
node1 机器myid内容为1
node2 机器myid内容为 2
node3 机器myid内容为3

三台机器启动zookeeper
bin/zkServer.sh start

6.2 三台机器安装kafka集群
6.2.1 下载kafka安装压缩包
http://archive.apache.org/dist/kafka/

6.2.2 上传压缩包并解压

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值