Kafka学习总结

Kafka

官网地址
http://kafka.apache.org/21/documentation.html#introduction

Apache Kafka®是一个分布式流媒体平台。这到底是什么意思?流媒体平台有三个关键功能:发布和订阅记录流,类似于消息队列或企业消息系统。以容错的持久方式存储记录流。在记录发生时处理记录流。

Kafka通常用于两大类应用程序:

构建实时流数据管道,在系统或应用程序之间可靠地获取数据;

构建实时流应用程序,转换或响应数据流。

为了理解Kafka是如何做这些事情的,让我们深入研究一下Kafka的能力。

首先是一些概念:

Kafka作为集群运行在一个或多个服务器上,这些服务器可以跨多个数据中心。

Kafka集群将记录流存储在称为主题的类别中。

每条记录由一个键、一个值和一个时间戳组成。

具体组件
Topic :消息根据Topic进行归类,一个队列

Producer:发送消息者

Consumer:消息接受者

Broker:每个kafka实例(server)。一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。

Zookeeper:依赖集群保存meta信息。

其他概念:

Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。

要想topic有序要全局排序。(浪费资源)

Offset:kafka的存储文件都是按照offset.kafka来命名,用offset做名字的好处是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。当然the first offset就是00000000000.kafka。

Metadata:

Metadata是Topic/Partition 和 broker 的映射关系,每一个 topic 的每一个 partition,需要知道对应的 broker 列表是什么,leader是谁、follower 是谁。这些信息都是存储在 Metadata 这个类里面

消息分发方式:broker-(push)>topic<-(pull)consumer

klafka集群中的任何一个broker都可以向producer提供metadata信息,这些metadata中包含"集群中存活的servers列表"/"partitions leader列表"等信息;当producer获取到metadata信息之后, producer将会和Topic下所有partition leader保持socket连接;

消息由producer直接通过socket发送到broker

问题

  1. 在kafka中,一个partition中的消息只会被group中的一个consumer消费(同一时刻)

  2. kafka只能保证一个partition中的消息被某个consumer消费时是顺序的;事实上,从Topic角度来说,当有多个partitions时,消息仍不是全局有序的。

kafka存储机制:首先理解Sequence I/O和Random I/O的区别,如果它在磁盘的某个地方,访问它会有同样的寻道和旋转时延,我们就把这种方式的IO叫做随机IO;但是如果它刚好就在你刚才访问的那一个磁盘块的后面,磁头就能立刻遇到,不需等待,这种IO就叫顺序IO

首先,kafka是“规规矩矩”的,因为Kafka在磁盘上只做Sequence I/O,由于消息系统读写的特殊性,这并不存在什么问题。

关于磁盘I/O的性能,Kafka官方给出的测试数据(Raid-5,7200rpm):

Sequence I/O: 600MB/s
Random I/O: 100KB/s

  1. OS从硬盘把数据读到内核区的PageCache。
  2. 用户进程把数据从内核区Copy到用户区。
  3. 然后用户进程再把数据写入到Socket,数据流入内核区的Socket Buffer上。
  4. OS再把数据从Buffer中Copy到网卡的Buffer上,这样完成一次发送。

传统网络IO

在这里插入图片描述

kafka
在这里插入图片描述
数据的存储机制:
1、Broker先接收到数据后,将数据放到操作系统(linux)的缓存里(pagecache),pagecache会尽可能多的使用空闲内存,
会是有sendfile技术尽可能多的减少操作系统和应用程序之间的重复缓存。
2、写入数据的时候使用顺序写入,速度可达600m/s
3、如果此时正好有消费者消费数据,会直接绕过磁盘从pagecache里进行消费

设计思想是在内存中完成整个过程,实现过程中的零拷贝

“零拷贝技术”是用将磁盘文件的数据复制到页面缓存中一次,然后将数据从页面缓存直接发送到网络中(发送给不同的订阅者时,都可以使用同一个页面缓存),避免了重复复制操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值