kafka学习之路(一)——入门_汤高的博客-CSDN博客


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

kafka学习之路(一)——入门_汤高的博客-CSDN博客
kafka学习之路(一)——入门
汤高
于 2016-07-16 23:32:26 发布
19819
收藏
66
分类专栏:
大数据与云计算
kafka
大数据生态系统技术
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tanggao1314/article/details/51927081
版权
大数据与云计算
同时被 3 个专栏收录
50 篇文章
3 订阅
订阅专栏
kafka
5 篇文章
4 订阅
订阅专栏
大数据生态系统技术
60 篇文章
100 订阅
订阅专栏
kafka学习之路(一)——入门
Kafka学习之路...
一、入门..
1、      简介
2、      主题(Topics)、日志(Logs)
3、      分布式(Distribution)
4、      生产者(Producers)
5、      消费者(Consumers)
一、入门
1、简介
Kafka 是linkedin 公司用于日志处理的分布式消息队列,同时支持离线和在线日志处理。kafka 对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka 集群有多个kafka 实例组成,每个实例(server)称为broker。无论是kafka集群,还是producer和consumer 都依赖于zookeeper 来保证系统可用性,为集群保存一些meta 信息。
我们先来看下几个消息传递系统的术语:
·        Kafka维护消息类别的东西是主题(topic).
·        我们称发布消息到Kafka主题的进程叫生产者(producer).
·        我们称订阅主题、获取消息的进程叫消费者(consumer).
·        Kafka是由多个服务器组成的机器,每个服务器称作代理(broker)
在较高的层次上看,生产者通过网络发送消息到Kafka集群,Kafka集群将这些消息提供给消费者,如下图:
客户端与服务器之间的通信通过一个简单的、高性能的、语言无关的TCP protocol. Kafka有Java客户端,但这客户端在很多语言many languages也是有效的。
2、主题(Topics)、日志(Logs)
一个Topic 可以认为是一类消息,每个topic 将被分成多个partition(区),每个partition 在存储层面是append log 文件。任何发布到此partition 的消息都会被直接追加到log 文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset 为一个long型数字,它是唯一标记一条消息。kafka 并没有提供其他额外的索引机制来存储offset,因为在kafka 中几乎不允许对消息进行“随机读写”。
一个主题就是消息的类别或名称。对每个主题,Kafka集群都管理着一个被分区的日志,如下:
每个分区就是一个提交日志:每个分区上保存着不断被追加的消息,这些消息是有序的且顺序不可改变;分区上的每个消息都被分配了一个序列号offset,offset唯一标识了分区上的消息。
在kafka 中,即使消息被消费,消息仍然不会被立即删除。日志文件将会根据broker 中的配置要求,保留一定的时间之后删除;比如log 文件保留2 天,那么两天后,文件会被清除,无论其中的消息是否被消费。kafka 通过这种简单的手段,来释放磁盘空间,以及减少消息消费之后对文件内容改动的磁盘IO 开支。
对于consumer 而言,它需要保存消费消息的offset,对于offset的保存和使用, 由consumer 来控制; 当consumer 正常消费消息时,offset 将会"线性"的向前驱动,即消息将依次顺序被消费。事实上consumer 可以使用任意顺序消费消息,它只需要将offset 重置为任意值。(offset 将会保存在zookeeper 中,参见下文)
kafka集群几乎不需要维护任何consumer和producer 状态信息,这些信息由zookeeper 保存;因此producer和consumer 的客户端实现非常轻量级,它们可以随意离开,而不会对集群造成额外的影响。partitions的设计目的有多个。最根本原因是kafka基于文件存储。通过分区,可以将日志内容分散到多个server 上,来避免文件尺寸达到单机磁盘的上限,每个partiton都会被当前server(kafka实例)保存;可以将一个topic 切分多任意多个partitions来保存消息。此外越多的partitions 意味着可以容纳更多的consumer,有效提升并发消费的能力。(具体原理参见下文)。这些特性表明,Kafka的消费者是非常廉价的,一个消费者的创建、销毁不会对集群或其他消费者产生多大的影响。
对日志进行分区有几个目的:
1、扩容,一个主题可以有多个分区,这使得可以保存比一个机器保存的多的多的数据。
2、并行
3、分布式(Distribution)
一个Topic 的多个partitions,被分布在kafka 集群中的多个server 上;每个server(kafka 实例)负责partitions中消息的读写操作;此外kafka 还可以配置partitions 需要备份的个数(replicas),每个partition 将会被备份到多台机器上,以提高可用性。
基于replicated(冗余) 方案,那么就意味着需要对多个备份进行调度;每个partition 都有一个机器为"leader";零个或多个机器作为follower。leader 负责所有的读写操作,follower执行leader的指令。如果leader 失效,那么将会有其他follower 来接管(成为新的leader);follower只是单调的和leader 跟进,同步消息即可。由此可见作为leader 的server 承载了全部的请求压力,因此从集群的整体考虑,有多少个partitions就意味着有多少个"leader",kafka会将"leader"均衡的分散在每个实例上,来确保整体的性能稳定。
1.发送到partitions 中的消息将会按照它接收的顺序追加到日志中。
2.对于消费者而言,它们消费消息的顺序和日志中消息顺序一致。
3.如果Topic 的"replicationfactor"(备份因子)为N,那么允许N-1 个kafka实例失效。
4、生产者(Producers)
Producer 将消息发布到指定的Topic中,同时Producer 也能决
定将此消息归属于哪个partition;这可以通过简单的循环的方式来实现,或者使用一些分区方法(比如根据消息的key来分区)
5、消费者(Consumers)
传统的消息传递有两种方式: 队列方式(queuing)、发布-订阅(publish-subscribe)方式.
队列方式:一组消费者从机器上读消息,每个消息只传递给这组消费者中的一个。
分布-订阅方式:消息被广播到所有的消费者。Kafka提供了一个消费组(consumer group)的说法来概括这两种方式。
消费者都属于一个消费组;反过来说,每个消费组中可以有多个消费者。发送到Topic的消息,只会被订阅此Topic的每个消费组中的一个消费组消费。如果所有的消费者都具有相同的消费组,这种情况和queue模式很像;消息将会在consumers之间负载均衡。如果所有的consumer 都具有不同的group,那这就是"发布-订阅",消息将会广播给所有的消费者。
在kafka 中,一个partition 中的消息只会被group 中的一个consumer 消费;每个group 中consumer 消息消费互相独立;我们可以认为一个group 是一个"订阅"者,一个Topic 中的每个partions,只会被一个"订阅者"中的一个consumer消费,不过一个consumer 可以消费多个partitions 中的消息。kafka只能保证一个partition中的消息被某个consumer 消费时,消息是顺序的。事实上,从Topic 角度来说,消息仍不是有序的。kafka 的设计原理决定,对于一个topic,同一个group 中不能有多于partitions 个数的consumer 同时消费,否则将意味着某些consumer 将无法得到消息。
1.Kafka将主题下的分区分配给消费组里的消费者,每个分区被一个消费者消费
2.消费者的数量不能超过分区数
3.Kafka只能保证分区内的消息是有序的
4.如果你想要消息是全局有序的,你可以设置主题只有一个分区,同时这意味着只能有一个消费者
生产者发送的消息按照它们发送的顺序追加到主题
消费者看到消息的顺序就是消息在日志中存储的顺序
由此可以得到 Kafka与传统消息系统相比,有以下不同:
·        它被设计为一个分布式系统,易于向外扩展;
·        它同时为发布和订阅提供高吞吐量;
·        它支持多订阅者,当失败时能自动平衡消费者;
·        它将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。
转载请指明出处http://write.blog.csdn.net/postedit/51927081
汤高
关注
关注
25
点赞
66
收藏
打赏
评论
kafka学习之路(一)——入门
kafka学习之路(一)——入门Kafka学习之路...一、入门..1、      简介2、      主题(Topics)、日志(Logs)3、      分布式(Distribution)4、      生产者(Producers)5、      消费者(Consumers) 一、入门1、简介Kafka 是linkedin 公司用于日志处理的分布式消息队列,同时支持离线和在线日志处理。kafk...
复制链接
扫一扫
专栏目录
kafka学习总结(完整全面)
大叶子不小的博客
10-13
572
第1章 kafka概述
1.1 定义
Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于
大数据实时处理领域。
1.2 消息队列
1.2.1 传统消息队列的应用场景
使用消息队列的好处
1)解耦
允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
2)可恢复性
系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所
以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
3)缓冲
有助于控制和优化数
kafka
java小兵
10-09
258
目录
官方文档:
一、简介:
高性能
分区的设计
顺序读写
零拷贝技术
减少网络传输上的开销
基础组件:
kafka节点:broker
主题:topic
分区:partition
副本:Replication
同步副本集合ISR(in-sync replicas)
概念:
特点:
非同步状态副本OSR(Outof-sync Replicas)
partition中leader replication的选举:
Kafka 为何不采用大多数投票机制(quorum算法)来选举l
评论 6
您还未登录,请先
登录
后发表或查看评论
Kafka【基础入门】
最新发布
木易巷的小博客
11-03
482
Apache Kafka是一个分布式发布-订阅消息系统和一个强大的队列,可以处理大量的数据,并使能够将消息从一个端点传递到另一个端点,kafka适合离线和在线消息消费。
【Kafka】入门Kafka的学习建议
lingfy1234的博客
04-09
2234
本文希望帮助想了解Kafka的朋友们进行入门或者深入地学习,也算是作者学习Kafka之后的小感悟。
kafka学习详解
qq_45228323的博客
12-07
653
消息中间件对比
选择建议
消息中间件
建议
Kafka
追求高吞吐量,适合产生大量数据的互联网服务的数据收集业务
RocketMQ
可靠性要求很高的金融互联网领域,稳定性高,经历了多次阿里双11考验
RabbitMQ
性能较好,社区活跃度高,数据量没有那么大,优先选择功能比较完备的RabbitMQ
kafka介绍
Kafka 是一个分布式流媒体平台,类似于消息队列或企业消息传递系统。kafka官网:http://kafka.apache.org/
名词解释
producer
kafka学习(了解,kafka的介绍及特点)
weixin_44319151的博客
08-25
254
kafka理解及使用
1.什么是kafka???
kafka是一个分布式的,可分区的,多副本的,多订阅者的消息订阅系统。
1.1那么问题来了什么是消息队列呢(我们对比一下消息和消息队列):
**消息:**是指在应用之间传送的数据,消息非常简单,比如只包含文本字符串,也可以更加复杂,可能包含插入对象
消息队列:是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递,消息发布这只管把消息发布到MQ中不管谁来取,消息使用者只管从MQ中取消息而不管谁发布的,这样发布者和使用者都不用知道对方的
Kafka学习
weixin_44468025的博客
03-05
701
一.Kafka介绍
Kafak是一个分布式数据流平台,可以从如下几个层面来理解:
1.我们可以向Kafka发布数据以及从Kafka订阅数据,即我们可以将kafka看做一个消息队列。所起到的作用:缓冲(消峰限流),实现生产与消费的解耦。
2.Kafka可以存储数据,并提供容错机制,即数据丢失可以进行恢复
3.当数据到达Kafka之后,可以马上的被消费处理,即Kafka的延迟很低
综合,Kafka具备以上这三个明显的特点,根据Kafka的这些特点,Kafka的适用场景是:搭建实时流平台的中间件
在实际工作中,
【译】Kafka学习之路
weixin_34096182的博客
01-19
76
  一直在思考写一些什么东西作为2017年开篇博客。突然看到一篇《Kafka学习之路》的博文,觉得十分应景,于是决定搬来这“他山之石”。虽然对于Kafka博客我一向坚持原创,不过这篇来自Confluent团队Gwen Shapira女士的博文实在精彩,所以还是翻译给大家,原文参见这里。
~~~~~~~~~~~~
Kafka学习之路
  看上去很多工程师都已经把“学习Kafka”加到了2017年的t...
Kafka学习之路 (一)Kafka的简介
weixin_33910137的博客
05-07
118
一、简介
1.1 概述
Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
主要应用场景是:日志收集系统和消息系统。
Kafka主要设计目标如下:
...
Kafka学习之路 (三)Kafka的高可用
tby6686的专栏
11-25
153
目录
一、高可用的由来
1.1 为何需要Replication
1.2 Leader Election
二、Kafka HA设计解析
2.1 如何将所有Replica均匀分布到整个集群
2.2 Data Replication(副本策略)
2.2.1 消息传递同步策略
2.2.2 ACK前需要保证有多少个备份
2.2.3 Leader Election算法
2.2.4 如何处理所有Replica都不工作
2.2.5 选举Leader
三、HA相关ZooKeeper结构
3.1 ad
Kafka的简介
qq_39583810的博客
09-29
85
一、简介
1.1 概述
Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
主要应用场景是:日志收集系统和消息系统。
Kafka主要设计目标如下:
以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。
高吞吐率。即使在非常廉价的商用
Kafka学习系列一
醒醒康康博客
03-16
39
Kafka学习系列一
kafka学习
weixin_43590392的博客
03-28
872
kafka学习笔记
1.kafka是什么?
百度百科:Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Ha
RabbitMQ和Kafka到底怎么选?
andun6063的博客
09-12
5519
前言
开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特性,在进行工程选择时,往往眼花缭乱,不知所措。对于RabbitMQ和Kafka,到底应该选哪个?
RabbitMQ架构
RabbitMQ是一个分布式系统,这里面有几个抽象概念。
broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。
master queue:每...
Kafka入门学习
一只慵懒的猫z的博客
04-08
1848
Kafka是一种高吞吐量的分布式发布订阅消息系统。由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。
Kafka
浪迹白杨的博客
06-25
4042
kafka
Kafka 概述
书香水墨
02-23
1123
一、什么是消息系统
消息系统负责将数据从一个应用程序传输到另一个应用程序,应用程序可以专注于数据,不担心如何共享它。 分布式消息传递基于可靠消息队列的概念。 消息在客户端应用程序和消息传递系统之间异步排队。 有两种类型的消息模式可用:一种是点对点,另一种是发布 - 订阅(pub-sub)消息系统。 大多数消息模式遵循 pub-sub 。
1.1 点对点消息系统
在点对点系统中,消息被保留在队列中。 一个或多个消费者可以消耗队列中的消息,但是特定消息只能由最多一个消费者消费。 一旦消费者读取队列中的消息
kafka简介
热门推荐
m0_65931372的博客
07-25
4万+
Kafka 本质上是⼀个消息队列。与zeromq不同的是,Kafka是一个独立的框架而不是一个库。这里主要介绍其原理,至于具体的安装等操作不做介绍,只是提示一下,第一次运行时,先设置前台运行,看会不会报错。
架构
注意下图没有画上zookeeper,请自行脑补。kafka需要连接到zookeeper,来完成注册发现等集群操作。broker都是由zookeeper管理。
先给出 Kafka ⼀些重要概念,让⼤家对 Kafka 有个整体的认识和感知,后⾯还会详细的解析每⼀个概念的作⽤以及更深⼊的原理:
Pr
超详细! kafka 入门最佳实践
民工哥的博客
02-05
1079
点击下方“民工哥技术之路”,选择“设为星标”回复“1024”获取独家整理的学习资料!认识 kafkakafka简介Kafka 是一个分布式流媒体平台,kafka官网:http://kafk...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️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篇
算法面试题
目录
评论 6
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
汤高
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值