KAFKA分布式消息系统

Kafka[1]linkedin用于日志处理的分布式消息队列,linkedin的日志数据容量大,但对可靠性要求不高,其日志数据主要包括用户行为(登录、浏览、点击、分享、喜欢)以及系统运行日志(CPU、内存、磁盘、网络、系统及进程状态)。

 

当前很多的消息队列服务提供可靠交付保证,并默认是即时消费(不适合离线)。高可靠交付对linkedin的日志不是必须的,故可通过降低可靠性来提高性能,同时通过构建分布式的集群,允许消息在系统中累积,使得kafka同时支持离线和在线日志处理。

 

注:本文中发布者(publisher)与生产者(producer)可以互换,订阅者(subscriber)与消费者(consumer)可以互换。

 

Kafka的架构如下图所示:

20196318_1314527613UU4v.png

Kafka存储策略

1.  kafkatopic来进行消息管理,每个topic包含多个partition),每个part对应一个逻辑log,有多个segment组成。

2.  每个segment中存储多条消息(见下图),消息id由其逻辑位置决定,即从消息id可直接定位到消息的存储位置,避免id到位置的额外映射。

3.  每个part在内存中对应一个index,记录每个segment中的第一条消息偏移。

4.  发布者发到某个topic的消息会被均匀的分布到多个part上(随机或根据用户指定的回调函数进行分布),broker收到发布消息往对应part的最后一个segment上添加该消息,当某个segment上的消息条数达到配置值或消息发布时间超过阈值时,segment上的消息会被flush到磁盘,只有flush到磁盘上的消息订阅者才能订阅到,segment达到一定的大小后将不会再往该segment写数据,broker会创建新的segment

20196318_1314527666TOFm.png

发布与订阅接口


20196318_1314527750K25z.jpg

发布消息时,kafka client先构造一条消息,将消息加入到消息集set中(kafka支持批量发布,可以往消息集合中添加多条消息,一次行发布),send消息时,client需指定消息所属的topic

20196318_13145277628111.jpg

订阅消息时,kafka client需指定topic以及partition num(每个partition对应一个逻辑日志流,如topic代表某个产品线,partition代表产品线的日志按天切分的结果),client订阅后,就可迭代读取消息,如果没有消息,client会阻塞直到有新的消息发布。consumer可以累积确认接收到的消息,当其确认了某个offset的消息,意味着之前的消息也都已成功接收到,此时broker会更新zookeeper上地offset registry(后面会讲到)。

 

高效的数据传输

1.  发布者每次可发布多条消息(将消息加到一个消息集合中发布), sub每次迭代一条消息。

2.  不创建单独的cache,使用系统的page cache。发布者顺序发布,订阅者通常比发布者滞后一点点,直接使用linuxpage cache效果也比较后,同时减少了cache管理及垃圾收集的开销。

3.  使用sendfile优化网络传输,减少一次内存拷贝。

 

无状态broker

1.  Broker没有副本机制,一旦broker宕机,该broker的消息将都不可用。

2.  Broker不保存订阅者的状态,由订阅者自己保存。

3.  无状态导致消息的删除成为难题(可能删除的消息正在被订阅),kafka采用基于时间的SLA(服务水平保证),消息保存一定时间(通常为7天)后会被删除。

4.  消息订阅者可以rewind back到任意位置重新进行消费,当订阅者故障时,可以选择最小的offset进行重新读取消费消息。

 

Consumer group

1. 允许consumer group(包含多个consumer,如一个集群同时消费)对一个topic进行消费,不同的consumer group之间独立订阅。

2. 为了对减小一个consumer group中不同consumer之间的分布式协调开销,指定partition为最小的并行消费单位,即一个group内的consumer只能消费不同的partition

 

Zookeeper 协调控制

1. 管理brokerconsumer的动态加入与离开。

2. 触发负载均衡,当brokerconsumer加入或离开时会触发负载均衡算法,使得一

   个consumer group内的多个consumer的订阅负载平衡。

3.  维护消费关系及每个partion的消费信息。


Zookeeper上的细节:

1. 每个broker启动后会在zookeeper上注册一个临时的broker registry,包含brokerip地址和端口号,所存储的topicspartitions信息。

2. 每个consumer启动后会在zookeeper上注册一个临时的consumer registry:包含consumer所属的consumer group以及订阅的topics

3. 每个consumer group关联一个临时的owner registry和一个持久的offset registry。对于被订阅的每个partition包含一个owner registry,内容为订阅这个partitionconsumer id;同时包含一个offset registry,内容为上一次订阅的offset

 

消息交付保证

1. kafka对消息的重复、丢失、错误以及顺序型没有严格的要求。

2. kafka提供at-least-once delivery,即当consumer宕机后,有些消息可能会被重复delivery

3. 因每个partition只会被consumer group内的一个consumer消费,故kafka保证每个partition内的消息会被顺序的订阅。

4. Kafka为每条消息为每条消息计算CRC校验,用于错误检测,crc校验不通过的消息会直接被丢弃掉。

 

Linkedin的应用环境

如下图,左边的应用于日志数据的在线实时处理,右边的应用于日志数据的离线分析(现将日志pullhadoopDWH中)。

20196318_13145278267LUq.png

 

 

Kafka的性能

 

测试环境: 2 Linux machines, each with 8 2GHz cores,  16GB  of  memory,  6  disks  with  RAID  10.  The  two machines  are  connected  with  a  1Gb  network  link.  One  of  the machines was used as the broker and the other machine was used as the producer or the consumer.

 

测试评价(by me):(1)环境过于简单,不足以说明问题。(2)对于producer持续的波动没有进行分析。(3)只有两台机器zookeeper都省了??

 

测试结果:如下图,完胜其他的message queue,单条消息发送(每条200bytes,能到50000messages/sec50batch方式发送,平均为400000messages/sec.

20196318_1314527856S4tS.jpg

Kafka未来研究方向

1. 数据压缩(节省网络带宽及存储空间)

2. Broker多副本

3. 流式处理应用


参考资料

【1】  http://research.microsoft.com/en-us/um/people/srikanth/netdb11/netdb11papers/netdb11-final12.pdf

【2】  https://cwiki.apache.org/KAFKA/kafka-papers-and-presentations.data/Kafka-netdb-06-2011.pdf

转载于:https://www.cnblogs.com/yunnotes/archive/2013/04/19/3032352.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jar打包 剔除第三方依赖以及它的依赖_面试官:为什么Spring Boot的jar可以直接运行?...

来源:Gormats Notesfangjian0423.github.io/2017/05/31/springboot-executable-jar/Spring Boot Loader抽象的一些类JarLauncher的执行过程关于自定义的类加载器LaunchedURLClassLoaderSpring Boot Loader的作用SpringBoot提供了一个插件spring-boot-maven-plugin用…

CQRS架构图

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/darkness/blog/814243

Analyzer普通用户登录不了[从网络访问此计算机]

问题: 最近客户诺奇反映说Analyzer普通用户登录不了,但是发现管理员又可以登录,几经周折发现原来是系统的本地安全策略设置了不让远程使用本地账户密码登录系统导致。解决方案: 修改本地安全策略的“从远程访问此计算机”中的用户…

源码 移植_FreeModbus移植总结

modbus是一项工业上经常用到的通讯协议,而freemodbus是一款开源的从机协议栈。关于它的移植网上已经有了很多的文章,但是大多都只是针对其中部分问题的表述。本文将会把自己在移植freemodbus过程中遇到的问题以及freemodbus的源码分析尽量表述清楚。&…

word标题大纲级别_快速按标题层级把Word转Excel—附详细操作步骤

如何快速把层级分明的word文档转换成横向从属结构的excel表格一、问题描述文档如下图所示。文档一共三个层次,大纲级别分别是1、2、3级,左则是其文档结构图,可以看出文档层级分明。最终要将文档转换成如下横向从属结构的表格。一个层次的内容…

servlet中getWriter和getOutputStream的区别

getWriter();getOutputStream();区别:1、getWriter()用于向客户机回送字符数据2、getOutputStream()返回的对象,可以回送字符数据,也可以回送字节数据(二进制数据)如何选择:若果我们回送字符数据&#xff0…

execve系统调用_张凯捷—系统调用分析(3) (基于最新Linux5.0版本系统调用日志收集系统)...

在上一篇文章《系统调用分析(2)》中介绍和分析了32位和64位的快速系统调用指令——sysenter/sysexit和syscall/sysret,以及内核对快速系统调用部分的相关代码,并追踪了一个用户态下的系统调用程序运行过程。本篇中将基于最新的Linux-5.0内核,…

批量下载小说网站上的小说(python爬虫)

随便说点什么 因为在学python,所有自然而然的就掉进了爬虫这个坑里,好吧,主要是因为我觉得爬虫比较酷,才入坑的。 想想看,你可以批量自动的采集互联网上海量的资料数据,是多么令人激动啊! 所以我…

华为欧拉系统服务器开接口,华为操作系统 euleros

华为操作系统 euleros 内容精选换一换Atlas 900 AI集群安装上架、服务器基础参数配置、安装操作系统等操作,请根据集群配置参见对应的手册:《Atlas 900 PoD 用户指南 (型号9000, 直流)》《Atlas 900 PoD 用户指南 (型号9000, 交流)》《Atlas 900 计算节点…

对勾函数_对勾函数?2020福建省中考压轴题分析

训练营机密视频大公开欢迎转发、分享传播知识,传播力量!福建也是全省统一考选择题:这题考的是二次函数的性质,先求出对称轴就好了填空题:这题看似有反比例,确实会用到反比例函数的对称性。但其实重点是考察…

通过Ajax解析和jQuery写了一个小小的导航条

最近在用ajax和jquery做开发&#xff0c;所以闲来无事写了些小导航条&#xff0c;通过ajax解析XML文件动态的创建WEB网站的导航条。 <link href"css/style.css" rel"stylesheet" type"text/css" /><script src"js/jquery-1.8.2.mi…

一次生产事故的优化经历

在一次正常的活动促销之后&#xff0c;客服开始陆续反馈有用户反应在抢标的时候打不开网页或者APP&#xff0c;在打开的时候标的就已经被抢光了&#xff0c;刚开始没有特别的上心&#xff0c;觉得抢标不就是这样吗&#xff0c;抢小米手机的时候也不就这样吗&#xff1f;随着活动…

Win系统利用本地安全策略全面禁止360等软件的安装与运行-1

这个理论应该也可以用在域对下设域用户上.各位不知道有没有这种经历&#xff0c;机子让别人玩了一上午&#xff0c;回来发现&#xff0c;自己干干净净的系统多了一堆某某安全助手&#xff0c;某某杀毒&#xff0c;某某手机助手等等&#xff0c;最可恨的还是不知一系列的&#x…

access考试素材_NCRE考试当天常见问题处理办法及各科目注意事项大汇总

温馨提醒为了方便大家在21-22号讨论考试抽中的题目&#xff0c;请自觉加入QQ群&#xff1a;776167039考试当天常见问题及处理办法大汇总问题一&#xff1a;考试当天忘记带身份证和准考证原因&#xff1a;这种情况&#xff0c;要么是忘了&#xff0c;要么真没有提前领到准考证。…

腾讯开源手游热更新方案,Unity3D下的Lua编程

写在前面\\xLua是Unity3D下Lua编程解决方案&#xff0c;自2016年初推广以来&#xff0c;已经应用于十多款腾讯自研游戏&#xff0c;因其良好性能、易用性、扩展性而广受好评。现在&#xff0c;腾讯已经将xLua开源到GitHub。\\2016年12月末&#xff0c;xLua刚刚实现新的突破&…

1加6投屏_6月1日起驾考要加项目?真相是这样

来源&#xff1a;新闻晨报近日网上流传一则消息让还没考出驾照的朋友们瑟瑟发抖网传消息称&#xff0c;上海、海南、陕西、贵州、浙江等地驾考科目二于6月1日起加项&#xff0c;因而“朋友们要抓紧时间报名&#xff0c;录入旧系统”。网传消息截图上海6月1日起科目二考试增加到…

网站等保测评针对服务器,互联互通测评知识分享之信息安全建设要点

原创 医疗测评实验室 中国软件评测中心 1周前医院互联互通测评&#xff0c;即国家医疗健康信息互联互通标准化成熟度测评&#xff0c;近年来随着政策的要求、需求的驱动、技术的更迭、价值的引领&#xff0c;越来越被业内人士接受和认可&#xff0c;测评热度也水涨船高。国家卫…

pandas合并groupby_pandas实践之GroupBy()

官网地址&#xff1a;https://pandas.pydata.org/docs/reference/groupby.htmlpandas中对数据进行分组操作的方法&#xff0c;官方有很详细的教程。下面的案例是真实遇到的问题&#xff0c;看一看用pandas是如何解决的。构造数据import pandas as pdimport numpy as npdf pd.D…

erdas遥感图像几何校正_定量/高光谱遥感之—光谱分析技术

文章转载自微信公众号CSDN&#xff0c;作者冰清-小魔鱼&#xff0c;版权归原作者及刊载媒体所有。在定量遥感或者高光谱遥感中&#xff0c;信息提取主要用到光谱/波谱分析技术。本专题对光谱/波谱分析中涉及的流程及一些技术进行讲解&#xff0c;包括以下内容&#xff1a;基本概…

Zipkin-1.19.0学习系列1:java范例

2019独角兽企业重金招聘Python工程师标准>>> 官网地址: https://github.com/openzipkin/zipkin http://zipkin.io/ https://www.oschina.net/p/zipkin 截止到2017/1/4为止&#xff0c;最新版本为: Zipkin 1.19 下载地址: https://github.com/openzipkin/zipkin/arc…