kafka学习之路(二)——提高_汤高的博客-CSDN博客


本站和网页 https://blog.csdn.net/tanggao1314/article/details/51932329 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

kafka学习之路(二)——提高_汤高的博客-CSDN博客
kafka学习之路(二)——提高
汤高
于 2016-07-17 14:59:26 发布
11486
收藏
30
分类专栏:
大数据与云计算
kafka
大数据生态系统技术
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tanggao1314/article/details/51932329
版权
大数据与云计算
同时被 3 个专栏收录
50 篇文章
3 订阅
订阅专栏
kafka
5 篇文章
4 订阅
订阅专栏
大数据生态系统技术
60 篇文章
100 订阅
订阅专栏
kafka学习之路(二)——提高
消息发送流程
因为Kafka内在就是分布式的,一个Kafka集群通常包括多个代理。为了均衡负载,将话题分成多个分区,每个代理存储一或多个分区。多个生产者和消费者能够同时生产和获取消息。
过程:
1.Producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里面
2.kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关注消息是否被消费。
3.Consumer从kafka集群pull数据,并控制获取消息的offset
原理:
生产者使用自己的序列化方法对消息内容进行编码。然后向broker发起消息。为了提高效率,一个发布请求中可以包含一组消息。
消费者订阅话题,并为话题创建一个或多个消息流。发布到该话题的消息被均衡的分发到这些流中。
每个消息流为不断产生的消息提供了迭代接口。
消费者迭代流中每一条消息,并处理消息的有效负载。
迭代器不会停止。如果当前没有消息,迭代器将阻塞直至有新的消息发布到该话题
kafka存储
Kafka的存储布局非常简单。话题的每个分区对应一个逻辑日志。物理上,一个日志为相同大小的一组分段文件。每次生产者发布消息到一个分区,代理就将消息追加到最后一个段文件中。当发布的消息数量达到设定值或者经过一定的时间后,段文件真正写入磁盘中。写入完成后,消息公开给消费者。
与传统的消息系统不同,Kafka系统中存储的消息没有明确的消息Id。消息通过日志中的逻辑偏移量来公开。这样就避免了维护配套密集寻址,用于映射消息ID到实际消息地址的随机存取索引结构的开销。消息偏移量是增量的,但不连续。要计算下一消息的偏移量,可以在其逻辑偏移的基础上加上当前消息的长度。
消费者始终从特定分区顺序地获取消息,如果消费者知道特定消息的偏移量,也就说明消费者已经消费了之前的所有消息。消费者向代理发出异步拉请求,准备字节缓冲区用于消费。每个异步拉请求都包含要消费的消息偏移量。Kafka利用sendfile API高效地从代理的日志段文件中分发字节给消费者。
代理
不同于其他消息系统,kafka代理是无状态的,即消费者必须维护已消费的状态消息,而代理完全不管。
这种设计的创新在于:
·        代理以一个基于时间的SLA应用于保留策略。当消息在代理中超过一定时间后,将会被自动删除。
·        消费者可以故意倒回到老的偏移量再次消费数据。虽然这违法了队列的常见约定,但常见于许多业务中。
与zookeeper的关系
kafka使用ZooKeeper用于管理、协调代理。每个Kafka代理通过Zookeeper协调其他Kafka代理。
当Kafka系统中新增了代理或某个代理失效时,Zookeeper服务将通知生产者和消费者。生产者与消费者据此开始与其他代理协调工作。
Zookeeper在Kakfa中扮演的角色:Kafka将元数据信息保存在Zookeeper中,但是发送给Topic本身的数据是不会发到Zk上的
·        kafka使用zookeeper来实现动态的集群扩展,不需要更改客户端(producer和consumer)的配置。broker会在zookeeper注册并保持相关的元数据(topic,partition信息等)更新。
·        而客户端会在zookeeper上注册相关的watcher。一旦zookeeper发生变化,客户端能及时感知并作出相应调整。这样就保证了添加或去除broker时,各broker间仍能自动实现负载均衡。这里的客户端指的是Kafka的消息生产端(Producer)和消息消费端(Consumer)
·        Broker端使用zookeeper来注册broker信息,以及监测partitionleader存活性.
·        Consumer端使用zookeeper用来注册consumer信息,其中包括consumer消费的partition列表等,同时也用来发现broker列表,并和partitionleader建立socket连接,并获取消息.
·        Zookeer和Producer没有建立关系,只和Brokers、Consumers建立关系以实现负载均衡,即同一个ConsumerGroup中的Consumers可以实现负载均衡(因为Producer是瞬态的,可以发送后关闭,无需直接等待)
kafka的设计
1、吞吐量
高吞吐是kafka需要实现的核心目标之一,为此kafka做了以下一些设计:
1. 数据磁盘持久化:消息不在内存中cache,直接写入到磁盘,充分利用磁盘的顺序读写性能
2. zero-copy:减少IO操作步骤
3. 数据批量发送
4. 数据压缩
5.  Topic划分为多个partition,提高parallelism(并行)
2、  负载均衡
1.   producer根据用户指定的算法,将消息发送到指定的partition
2.   存在多个partiiton,每个partition有自己的replica,每个replica分布在不同的Broker节点上
3.   多个partition需要选取出leadpartition,lead partition负责读写,并由zookeeper负责fail over
4.   通过zookeeper管理broker与consumer的动态加入与离开
3、拉取系统
由于kafka broker会持久化数据,broker没有内存压力,因此,consumer非常适合采取pull的方式消费数据,具有以下几点好处:
1. 简化kafka设计
2. consumer根据消费能力自主控制消息拉取速度
3. consumer根据自身情况自主选择消费模式,例如批量,重复消费,从尾端开始消费等
4、可扩展性
当需要增加broker结点时,新增的broker会向zookeeper注册,而producer及consumer会根据注册在zookeeper上的watcher感知这些变化,并及时作出调整。
kafka的应用场景:
1.消息队列
比起大多数的消息系统来说,Kafka有更好的吞吐量,内置的分区,冗余及容错性,这让Kafka成为了一个很好的大规模消息处理应用的解决方案。消息系统一般吞吐量相对较低,但是需要更小的端到端延时,并尝尝依赖于Kafka提供的强大的持久性保障。在这个领域,Kafka足以媲美传统消息系统,如ActiveMR或RabbitMQ。
2.行为跟踪
Kafka的另一个应用场景是跟踪用户浏览页面、搜索及其他行为,以发布-订阅的模式实时记录到对应的topic里。那么这些结果被订阅者拿到后,就可以做进一步的实时处理,或实时监控,或放到hadoop/离线数据仓库里处理。
3.元信息监控
作为操作记录的监控模块来使用,即汇集记录一些操作信息,可以理解为运维性质的数据监控吧。
4.日志收集
使用Kafka代替日志聚合(logaggregation)。日志聚合一般来说是从服务器上收集日志文件,然后放到一个集中的位置(文件服务器或HDFS)进行处理。然而Kafka忽略掉文件的细节,将其更清晰地抽象成一个个日志或事件的消息流。这就让Kafka处理过程延迟更低,更容易支持多数据源和分布式数据处理。比起以日志为中心的系统比如Scribe或者Flume来说,Kafka提供同样高效的性能和因为复制导致的更高的耐用性保证,以及更低的端到端延迟。
5.流处理
这个场景可能比较多,也很好理解。保存收集流数据,以提供之后对接的Storm或其他流式计算框架进行处理。很多用户会将那些从原始topic来的数据进行阶段性处理,汇总,扩充或者以其他的方式转换到新的topic下再继续后面的处理。例如一个文章推荐的处理流程,可能是先从RSS数据源中抓取文章的内容,然后将其丢入一个叫做“文章”的topic中;后续操作可能是需要对这个内容进行清理,比如回复正常数据或者删除重复数据,最后再将内容匹配的结果返还给用户。这就在一个独立的topic之外,产生了一系列的实时数据处理的流程。Strom和Samza是非常著名的实现这种类型数据转换的框架。
6.事件源
事件源是一种应用程序设计的方式,该方式的状态转移被记录为按时间顺序排序的记录序列。Kafka可以存储大量的日志数据,这使得它成为一个对这种方式的应用来说绝佳的后台。比如动态汇总(News feed)。
7.持久性日志(commit log)
Kafka可以为一种外部的持久性日志的分布式系统提供服务。这种日志可以在节点间备份数据,并为故障节点数据回复提供一种重新同步的机制。Kafka中日志压缩功能为这种用法提供了条件。在这种用法中,Kafka类似于Apache BookKeeper项目。
kafka的设计要点:
1、直接使用linux 文件系统的cache,来高效缓存数据。
2、采用linux Zero-Copy提高发送性能。传统的数据发送需要发送4次上下文切换,采用sendfile系统调用之后,数据直接在内核态交换,系统上下文切换减少为2次。根据测试结果,可以提高60%的数据发送性能。Zero-Copy详细的技术细节可以参考:https://www.ibm.com/developerworks/linux/library/j-zerocopy/
3、数据在磁盘上存取代价为O(1)。kafka以topic来进行消息管理,每个topic包含多个part(ition),每个part对应一个逻辑log,有多个segment组成。每个segment中存储多条消息,消息id由其逻辑位置决定,即从消息id可直接定位到消息的存储位置,避免id到位置的额外映射。每个part在内存中对应一个index,记录每个segment中的第一条消息偏移。发布者发到某个topic的消息会被均匀的分布到多个part上(随机或根据用户指定的回调函数进行分布),broker收到发布消息往对应part的最后一个segment上添加该消息,当某个segment上的消息条数达到配置值或消息发布时间超过阈值时,segment上的消息会被flush到磁盘,只有flush到磁盘上的消息订阅者才能订阅到,segment达到一定的大小后将不会再往该segment写数据,broker会创建新的segment。
、显式分布式,即所有的producer、broker和consumer都会有多个,均为分布式的。Producer和broker之间没有负载均衡机制。broker和consumer之间利用zookeeper进行负载均衡。所有broker和consumer都会在zookeeper中进行注册,且zookeeper会保存他们的一些元数据信息。如果某个broker和consumer发生了变化,所有其他的broker和consumer都会得到通知。
转载请指明http://blog.csdn.net/tanggao1314/article/details/51932329
汤高
关注
关注
点赞
30
收藏
打赏
评论
kafka学习之路(二)——提高
kafka学习之路(二)——提高消息发送流程因为Kafka内在就是分布式的,一个Kafka集群通常包括多个代理。为了均衡负载,将话题分成多个分区,每个代理存储一或多个分区。多个生产者和消费者能够同时生产和获取消息。  过程:1.Producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里面2.kafka集群接收到Produ...
复制链接
扫一扫
专栏目录
kafka学习之路
07-17
kafka原理和架构及使用
kafka-proxy:使用中间件向Kafka的代理请求
04-30
卡夫卡代理
这是具有可插拔中间件支持的Kafka的第7层/应用程序级别代理。 您可以使用它来更改客户端请求,然后再单击客户端,更改从代理发送到客户端的响应,或者传递请求/响应,同时产生一些副作用,例如跟踪指标或日志。
执照
麻省理工学院
GitHub
推特
评论 3
您还未登录,请先
登录
后发表或查看评论
Kafka学习基础知识
最新发布
weixin_46685542的博客
10-11
291
Kafka学习基础知识
Kafka日记(一)Kafka概念
从2017开始记录起的博客
03-22
302
由于工作需要研究Kafka,在网上搜索了许久,关于PHP+Kafka的使用偏向于过多重复华,在实际的使用中并没有解决的我的问题。特此记录,以供学习者少走弯路。
kafka内容聚合
书香水墨
05-01
179
Kafka学习之路 (一)Kafka的简介
开源日志系统比较-Scribe kafka
blade2001的专栏
10-08
2920
作者:Dong | 可以转载,
但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址:http://dongxicheng.org/search-engine/log-systems/
1. 背景介绍
许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征:
(1) 构建应
大数据实战之分布式发布订阅消息系统Kafka
longwenyanlan的博客
11-27
316
kafka概述:
官方文档:kafka.apache.org
和消息系统类似
消息中间件: 生产者和消费者
在生产者和消费者之间的一个缓冲区,生产者将产生的消息发送到kafka中,当消费者需要消息的时候,就去kafka中获取消息
解决问题: 1):消费者宕机 2):生产者产生的消息过快,消费者来不及消费 从根本上解决消息丢失问题
kafka架...
日志收集平台day02:kafka集群搭建与配置
intqao的博客
07-22
416
kafka集群搭建,使用zookeeper分布式应用程序协调服务软件管理集群。
使用Kafka做日志收集。
weixin_43960071的博客
01-18
530
需要收集的信息:
1、用户ID(user_id)
2、时间(act_time)
3、操作(action,可以是:点击:click,收藏:job_collect,投简历:cv_send,上传简历:cv_upload)
4、对方企业编码(job_code)
1、HTML可以理解为拉勾的职位浏览页面
2、Nginx用于收集用户的点击数据流,记录日志access.log
3、将Nginx收集的日志数据发送到Kafka主题:tp_individual
架构:
HTML+Nginx+ngx_kafka_module+K
大数据日志分析系统-缓存组件kafka
u014171282的博客
02-27
1042
kafka简介是一种高吞吐量的分布式发布订阅消息系统,当数据量不稳定,数据量大的时候想到它就对了。zookeeper简介是一个分布式的,开放源码的分布式应用程序协调服务,很多地方用到, 最常见的是为集群提供基础的、高可用HA(High Availability)服务是kafka集群的基础依赖,同时也是hadoop系列中实现HA的基础组件。实现HDFS的NamaNode和YARN的ResourceM...
java kafka日志_Kafka日志
weixin_39556474的博客
02-16
275
kafka是怎么通过偏移量找到对应的消息?首先消费者消费时会指定Topic和Partition,每个Partition对应物理上的Log文件夹,为了防止Log过大而带来的清理、删除困难,因此Partition分成多个LogSegment,每个LogSegment包含.index(偏移量索引日志)、.log(日志文件)、.timestamp(时间戳索引日志)等文件。其中偏移量索引是稀疏索引,从逻辑偏...
kafka主要定位日志传输_有赞百亿级日志系统架构设计
weixin_29035147的博客
01-15
189
一、概述日志是记录系统中各种问题信息的关键,也是一种常见的海量数据。日志平台为集团所有业务系统提供日志采集、消费、分析、存储、索引和查询的一站式日志服务。主要为了解决日志分散不方便查看、日志搜索操作复杂且效率低、业务异常无法及时发现等等问题。随着有赞业务的发展与增长,每天都会产生百亿级别的日志量(据统计,平均每秒产生 50 万条日志,峰值每秒可达 80 万条)。日志平台也随着业务的不断发展经历了多...
Kafka+Log4j实现日志集中管理
冷月宫主的专栏
07-07
277
摘要: 记录如何使用Kafka+Log4j实现集中日志管理的过程。
引言
前段时间写的《Spring+Log4j+ActiveMQ实现远程记录日志——实战+分析》得到了许多同学的认可,在认可的同时,也有同学提出可以使用Kafka来集中管理日志,于是今天就来学习一下。
特别说明,由于网络上关于Kafka+Log4j的完整例子并不多,我也是一边学习一边使用,因此如果有解释得不好或者错误的
ELFK日志分析系统(四)之Kafka
qq_45088125的博客
07-07
553
ELK日志分析系统(一)之ELK原理
ELK日志分析系统(二)之ELK搭建部署
ELFK日志分析系统(三)之FilebeatKafka是一种消息队列,主要用来处理大量数据状态下的消息队列,一般用来做日志的处理。既然是消息队列,那么Kafka也就拥有消息队列的相应的特性了。
可以在系统中起到“肖峰填谷”的作用,也可以用于异构、分布式系统中海量数据的异步化处理。主要原因是由于在高并发环境下,同步请求来不及处理,请求往往会发生阻塞。比如大量的请求并发访问数据库,导致行锁表锁,最后请求线程会堆积过多,从而触发 to
Kafka学习教程(一)
h624536203的博客
11-02
91
Kafka介绍
kafka是一个分布式,分区,多副本,基于zookeeper协调的分布式日志心态,常见的可以用于web/nginx日志,访问日志,消息服务等等。
主要应用场景是:日志收集系统和消息系统
kafka的设计目标
以时间复杂度O(1)的方式提供消息持久化能力
高吞吐率
支持kafka server间的消息分区,及分布消费,保证每一个parttion内的消息顺序传输
支持离线数据处理
支持在线扩展
消息传递模式有:点多点传递,发布-订阅模式,kafka是发布订阅模式
对于现行中间件
Kafka实现应用日志实时上报统计分析
weixin_40055163的博客
10-26
135
Kafka实现应用日志实时上报统计分析
1 Flume插件
1.1 简介
Apache Flume 是一种分布式的、高可靠的、高可用的日志收集聚合系统,将不同来源海量的日志数据传输到集中的数据存储。
Flume agent 负责把外部事件流(数据流)传输到指定下一跳,agent包括source(数据源)、
channel(传输通道)、sink(接收端)。Flume agent可以多跳级联,组成复杂的数据流。 Flume 支持多种类型的source:Avro数据源(序列化数据格式)、Thrift数据源(通讯协
【kafka KSQL】游戏日志统计分析(3)
weixin_34122810的博客
01-09
209
接上篇文章 【kafka KSQL】游戏日志统计分析(2),本文主要通过实例展示KSQL的连接查询功能。
创建另一个topic
bin/kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 4 --topic propnew...
Kafka: 用于日志处理的分布式消息系统
Terrances的博客
12-16
458
本文为《Kafka: a Distributed Messaging System for Log Processing》的全文翻译,为了让大家原汁原味的领悟到kafka的设计精髓,所以采用直译并适当在括号中添加了作者观点。
本文为作者原创文章,转载请保留出处和链接
摘要
日志处理已成为消费者互联网公司数据通道的一个关键组成部分。我们介绍卡夫卡(Kafka),一种为了在低延迟下收集和传递大容量...
【译文】《KAFKA官方文档》1. 入门指南
ifeves的博客
05-04
164
1.入门指南1.1简介Apache的Kafka™是一个分布式流平台(a distributed streaming platform)。这到底意味着什么?我们认为,一个流...
Fink实战-如何将Flink应用的日志发送到kafka
a934079371的博客
09-21
458
点击蓝色字关注!本篇文章大概4833字,阅读时间大约13分钟产线环境上的Flink应用是长时运行的应用,日志量较大,通过flink web页面查看任务日志会导致浏览器卡死,通过日志排查问...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:编程工作室
设计师:CSDN官方博客
返回首页
汤高
CSDN认证博客专家
CSDN认证企业博客
码龄8年
暂无认证
159
原创
5万+
周排名
160万+
总排名
122万+
访问
等级
9433
积分
955
粉丝
923
获赞
411
评论
2241
收藏
私信
关注
热门文章
hash算法原理详解
234235
Java面试笔试题大汇总(最全+详细答案)
90564
Java接入Spark之创建RDD的两种方式和操作RDD
45372
Hadoop2.6(新版本)----MapReduce工作原理
34395
Python快速学习第二天
28176
分类专栏
大数据生态系统技术
60篇
数据结构与算法
5篇
Java网络编程
11篇
23天征服--23种设计模式
22篇
Spark
6篇
Web Service
5篇
Java技术
8篇
JavaScript
26篇
数据库
4篇
Java EE
7篇
Java线程
7篇
网络编程
3篇
Struts2
4篇
Java设计模式
23篇
软件环境搭建
2篇
Java面试题
2篇
数据结构与算法
5篇
大型数据库技术
Mybatis
2篇
JDK源码分析
中间件
1篇
Redis
3篇
hbase集群安装
4篇
大数据与云计算
50篇
Java疑难杂症
6篇
kafka
5篇
scala
storm
8篇
spark
6篇
linux学习
13篇
工作总结
14篇
Python学习
12篇
quartz
2篇
算法大杂烩
3篇
算法面试题
最新评论
数据挖掘算法之贝叶斯网络
Gao_Yaya:
使用假设:在c已知的情况下,ab独立。然后使用了这个假设证明了,在c条件下,ab独立。这样可以吗?
hash算法原理详解
小白pk菜鸡:
1位、2位、……、6位、7位、8位是指千万位、百万位、……百位、十位、个位。
JDK动态代理的底层实现原理
z563394688:
设置jvm参数让生成的class文件不消失
hash算法原理详解
carth.r:
博主你好,原文中的” 2) 由于哈希函数是一个压缩映象,因此,在一般情况下,很容易产生“冲突”现象,即: key1!=key2,而 f (key1) = f(key2)。“中的” f (key1) = f(key2)“是否应该改成” f (key1) == f(key2)”更好
JDK动态代理的底层实现原理
帅气呢杰哥:
请问楼主,我跑了下代码,看不到有代理对象生成,也就看不了.class文件,这个怎么破?
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
Spring 配置数据库用户名密码加密
Google 面试题分析 | 字典里面的最长单词
Trie树分析
2018年3篇
2017年4篇
2016年137篇
2015年51篇
目录
目录
分类专栏
大数据生态系统技术
60篇
数据结构与算法
5篇
Java网络编程
11篇
23天征服--23种设计模式
22篇
Spark
6篇
Web Service
5篇
Java技术
8篇
JavaScript
26篇
数据库
4篇
Java EE
7篇
Java线程
7篇
网络编程
3篇
Struts2
4篇
Java设计模式
23篇
软件环境搭建
2篇
Java面试题
2篇
数据结构与算法
5篇
大型数据库技术
Mybatis
2篇
JDK源码分析
中间件
1篇
Redis
3篇
hbase集群安装
4篇
大数据与云计算
50篇
Java疑难杂症
6篇
kafka
5篇
scala
storm
8篇
spark
6篇
linux学习
13篇
工作总结
14篇
Python学习
12篇
quartz
2篇
算法大杂烩
3篇
算法面试题
目录
评论 3
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
汤高
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值