- 浏览: 494352 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
Kafka
消息队列MQ技术的一种应用
kafka的构架:
1.Brocker:Kafka集群包含一个或多个服务器,这种服务器被称为broker。生产者向Brocker发送事件,消费者从Brocker中拿事件
2.Topic:可以将topic看成是一个消息队列,每个事件都必须指定其要存在在哪个topic中(这里倒是可以当成事件的分类来看待),
topic是存在于brocker之中的
3.Partition:每个topic都可以包含一个或者多个partition,可以将topic中的各个事件按照规则分开存放
4.Producer:即生产者,负责发送事件到kafka brocker
5.Consumer:即消费者,从kafka brocker读取事件
6.Consumer Group:每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。
7.无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。
kafka通过Consumer Group来实现消息的广播和单播,一个事件发送到一个Consumer Group中,那么这个Group中只能有一个Consumer消费这个事件,但是其他的Consumer Group也可以由其中的一个Consumer来消费这个事件
如果要实现广播,让每个Consumer都能收到某个Topic中的事件,只要让各个Consumer处在不同的Consumer Group中即可;单播则是
将所有的Consumer放在一个Consumer Group中
示意图:
kafka构架图:
图中的zk起到的作用就是负载均衡,将集群中的变化及时同步到各个节点中,保证集群是一致的
参考原文:http://blog.csdn.net/qq1010885678/article/details/47302557
相关功能描述:
对于传统的message queue而言,一般会删除已经被消费的消息,而Kafka集群会保留所有的消息,无论其被消费与否。当然,因为磁
盘限制,不可能永久保留所有数据(实际上也没必要),因此Kafka提供两种策略删除旧数据。一是基于时间,二是基于Partition文
件大小。
Producer发送消息到broker时,会根据Paritition机制选择将其存储到哪一个Partition。如果Partition机制设置合理,所有消息可
以均匀分布到不同的Partition里,这样就实现了负载均衡。
一个Topic可以认为是一类消息,每个topic将被分成多个partition(区),每个partition在存储层面是append log文件。任何发布到此
partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long型数字,它
是唯一标记一条消息。它唯一的标记一条消息。kafka并没有提供其他额外的索引机制来存储offset,因为在kafka中几乎不允许对消
息进行“随机读写”。
对于consumer而言,它需要保存消费消息的offset,对于offset的保存和使用,有consumer来控制;当consumer正常消费消息时,offset
将会"线性"的向前驱动,即消息将依次顺序被消费.事实上consumer可以使用任意顺序消费消息,它只需要将offset重置为任意值..
(offset将会保存在zookeeper中)
partitions的设计目的有多个.最根本原因是kafka基于文件存储.通过分区,可以将日志内容分散到多个server上,来避免文件尺寸达
到单机磁盘的上限,每个partiton都会被当前server(kafka实例)保存;可以将一个topic切分多任意多个partitions,来消息保存/消费
的效率.此外越多的partitions意味着可以容纳更多的consumer,有效提升并发消费的能力.每个partition对应于一个文件夹,该文件
夹下存储该partition的数据和索引文件
一个Topic的多个partitions,被分布在kafka集群中的多个server上;每个server(kafka实例)负责partitions中消息的读写操作;此外
kafka还可以配置partitions需要备份的个数(replicas),每个partition将会被备份到多台机器上,以提高可用性.
基于replicated方案,那么就意味着需要对多个备份进行调度;每个partition都有一个server为"leader";leader负责所有的读写操作,
如果leader失效,那么将会有其他follower来接管(成为新的leader);follower只是单调的和leader跟进,同步消息即可..由此可见作为
leader的server承载了全部的请求压力,因此从集群的整体考虑,有多少个partitions就意味着有多少个"leader",kafka会将"leader"
均衡的分散在每个实例上,来确保整体的性能稳定.
本质上kafka只支持Topic.每个consumer属于一个consumer group;反过来说,每个group中可以有多个consumer.发送到Topic的消息,
只会被订阅此Topic的每个group中的一个consumer消费.
如果所有的consumer都具有相同的group,这种情况和queue模式很像;消息将会在consumers之间负载均衡.
如果所有的consumer都具有不同的group,那这就是"发布-订阅";消息将会广播给所有的消费者.
在kafka中,一个partition中的消息只会被group中的一个consumer消费;每个group中consumer消息消费互相独立;我们可以认为一个
group是一个"订阅"者,一个Topic中的每个partions,只会被一个"订阅者"中的一个consumer消费,不过一个consumer可以消费多个
partitions中的消息.kafka只能保证一个partition中的消息被某个consumer消费时,消息是顺序的.
kafka的设计原理决定,对于一个topic,同一个group中不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer
将无法得到消息.
Kafka的消息是存放到磁盘的,因为中顺序读写所以效率是很高的,(随机读写因为磁头来回变动所以慢)
Kafka的消息存储格式:[Offset MessageSize Message]
Offset:消息偏移(不断增大(64位))
MessageSize:消息长度((64位))
Message:消息数据
当然数据里是有数据的CRC校验的。
1.数据文件并不是只有一个文件,而是由多个文件(segment)组成的,每个segment名为该segment第一条消息的offset和“.kafka”组成。
2.另外会有一个索引文件,它标明了每个segment下包含的log entry的offset范围,因为每条消息都被append到该partition中,是顺序
写磁盘,因此效率非常高
3.每一条消息被发送到broker时,会根据paritition规则选择被存储到哪一个partition。如果partition规则设置的合理,所有消息可以
均匀分布到不同的partition里,这样就实现了水平扩展。(读取的时候可以先计算出到那个partition进行读索引文件找到数据,不用全
broker搜索)
主从复制备份原理
kafka将每个partition数据复制到多个server上,任何一个partition有一个leader和多个follower(可以没有);备份的个数可以通过
broker配置文件来设定.leader处理所有的read-write请求,follower需要和leader保持同步.Follower和consumer一样,消费消息并
保存在本地日志中;leader负责跟踪所有的follower状态
如果follower"落后"太多或者失效,leader将会把它从replicas同步列表中删除.当所有的follower都将一条消息保存成功,此消息才
被认为是"committed",那么此时consumer才能消费它.即使只有一个replicas实例存活,仍然可以保证消息的正常发送和接收,只要
zookeeper集群存活即可.
kafka支持一次读多个消息和copyfile提高主从复制的效率
主从同步中的维护了一个ISR(a set of in-sync replicas)表(集),表中是数据同步的follower列表,一个消息发送到leader后,
消息必须要同步到了ISR中的所有列表时才会认为提交成功,当leader down掉了,就会从ISR中找出一个ID最小的作为Leader,ISR
中follower的数据是同步的.所以只要ISR中有一个follower是工作的还能正常提供服。
1) Producer端使用zookeeper用来"发现"broker列表,以及和Topic下每个partition leader建立socket连接并发送消息.
2) Broker端使用zookeeper用来注册broker信息,已经监测partitionleader存活性.
3) Consumer端使用zookeeper用来注册consumer信息,其中包括consumer消费的partition列表等,同时也用来发现broker列表,并和
partition leader建立socket连接,并获取消息.
Kafka通过Zookeeper实现它的功能的,只要配置好相关的配置文件,Kafka就会与Zookeeper合作完成集群功能的.Kafka会在Zookeeper中生成一堆的目录,每个应用都监控Zookeeper相关目录的变化而作出相应的处理.如:Broker发生变化,
参考原文:http://www.cnblogs.com/likehua/p/3999538.html
消息队列MQ技术的一种应用
kafka的构架:
1.Brocker:Kafka集群包含一个或多个服务器,这种服务器被称为broker。生产者向Brocker发送事件,消费者从Brocker中拿事件
2.Topic:可以将topic看成是一个消息队列,每个事件都必须指定其要存在在哪个topic中(这里倒是可以当成事件的分类来看待),
topic是存在于brocker之中的
3.Partition:每个topic都可以包含一个或者多个partition,可以将topic中的各个事件按照规则分开存放
4.Producer:即生产者,负责发送事件到kafka brocker
5.Consumer:即消费者,从kafka brocker读取事件
6.Consumer Group:每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。
7.无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。
kafka通过Consumer Group来实现消息的广播和单播,一个事件发送到一个Consumer Group中,那么这个Group中只能有一个Consumer消费这个事件,但是其他的Consumer Group也可以由其中的一个Consumer来消费这个事件
如果要实现广播,让每个Consumer都能收到某个Topic中的事件,只要让各个Consumer处在不同的Consumer Group中即可;单播则是
将所有的Consumer放在一个Consumer Group中
示意图:
kafka构架图:
图中的zk起到的作用就是负载均衡,将集群中的变化及时同步到各个节点中,保证集群是一致的
参考原文:http://blog.csdn.net/qq1010885678/article/details/47302557
相关功能描述:
对于传统的message queue而言,一般会删除已经被消费的消息,而Kafka集群会保留所有的消息,无论其被消费与否。当然,因为磁
盘限制,不可能永久保留所有数据(实际上也没必要),因此Kafka提供两种策略删除旧数据。一是基于时间,二是基于Partition文
件大小。
Producer发送消息到broker时,会根据Paritition机制选择将其存储到哪一个Partition。如果Partition机制设置合理,所有消息可
以均匀分布到不同的Partition里,这样就实现了负载均衡。
一个Topic可以认为是一类消息,每个topic将被分成多个partition(区),每个partition在存储层面是append log文件。任何发布到此
partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long型数字,它
是唯一标记一条消息。它唯一的标记一条消息。kafka并没有提供其他额外的索引机制来存储offset,因为在kafka中几乎不允许对消
息进行“随机读写”。
对于consumer而言,它需要保存消费消息的offset,对于offset的保存和使用,有consumer来控制;当consumer正常消费消息时,offset
将会"线性"的向前驱动,即消息将依次顺序被消费.事实上consumer可以使用任意顺序消费消息,它只需要将offset重置为任意值..
(offset将会保存在zookeeper中)
partitions的设计目的有多个.最根本原因是kafka基于文件存储.通过分区,可以将日志内容分散到多个server上,来避免文件尺寸达
到单机磁盘的上限,每个partiton都会被当前server(kafka实例)保存;可以将一个topic切分多任意多个partitions,来消息保存/消费
的效率.此外越多的partitions意味着可以容纳更多的consumer,有效提升并发消费的能力.每个partition对应于一个文件夹,该文件
夹下存储该partition的数据和索引文件
一个Topic的多个partitions,被分布在kafka集群中的多个server上;每个server(kafka实例)负责partitions中消息的读写操作;此外
kafka还可以配置partitions需要备份的个数(replicas),每个partition将会被备份到多台机器上,以提高可用性.
基于replicated方案,那么就意味着需要对多个备份进行调度;每个partition都有一个server为"leader";leader负责所有的读写操作,
如果leader失效,那么将会有其他follower来接管(成为新的leader);follower只是单调的和leader跟进,同步消息即可..由此可见作为
leader的server承载了全部的请求压力,因此从集群的整体考虑,有多少个partitions就意味着有多少个"leader",kafka会将"leader"
均衡的分散在每个实例上,来确保整体的性能稳定.
本质上kafka只支持Topic.每个consumer属于一个consumer group;反过来说,每个group中可以有多个consumer.发送到Topic的消息,
只会被订阅此Topic的每个group中的一个consumer消费.
如果所有的consumer都具有相同的group,这种情况和queue模式很像;消息将会在consumers之间负载均衡.
如果所有的consumer都具有不同的group,那这就是"发布-订阅";消息将会广播给所有的消费者.
在kafka中,一个partition中的消息只会被group中的一个consumer消费;每个group中consumer消息消费互相独立;我们可以认为一个
group是一个"订阅"者,一个Topic中的每个partions,只会被一个"订阅者"中的一个consumer消费,不过一个consumer可以消费多个
partitions中的消息.kafka只能保证一个partition中的消息被某个consumer消费时,消息是顺序的.
kafka的设计原理决定,对于一个topic,同一个group中不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer
将无法得到消息.
Kafka的消息是存放到磁盘的,因为中顺序读写所以效率是很高的,(随机读写因为磁头来回变动所以慢)
Kafka的消息存储格式:[Offset MessageSize Message]
Offset:消息偏移(不断增大(64位))
MessageSize:消息长度((64位))
Message:消息数据
当然数据里是有数据的CRC校验的。
1.数据文件并不是只有一个文件,而是由多个文件(segment)组成的,每个segment名为该segment第一条消息的offset和“.kafka”组成。
2.另外会有一个索引文件,它标明了每个segment下包含的log entry的offset范围,因为每条消息都被append到该partition中,是顺序
写磁盘,因此效率非常高
3.每一条消息被发送到broker时,会根据paritition规则选择被存储到哪一个partition。如果partition规则设置的合理,所有消息可以
均匀分布到不同的partition里,这样就实现了水平扩展。(读取的时候可以先计算出到那个partition进行读索引文件找到数据,不用全
broker搜索)
主从复制备份原理
kafka将每个partition数据复制到多个server上,任何一个partition有一个leader和多个follower(可以没有);备份的个数可以通过
broker配置文件来设定.leader处理所有的read-write请求,follower需要和leader保持同步.Follower和consumer一样,消费消息并
保存在本地日志中;leader负责跟踪所有的follower状态
如果follower"落后"太多或者失效,leader将会把它从replicas同步列表中删除.当所有的follower都将一条消息保存成功,此消息才
被认为是"committed",那么此时consumer才能消费它.即使只有一个replicas实例存活,仍然可以保证消息的正常发送和接收,只要
zookeeper集群存活即可.
kafka支持一次读多个消息和copyfile提高主从复制的效率
主从同步中的维护了一个ISR(a set of in-sync replicas)表(集),表中是数据同步的follower列表,一个消息发送到leader后,
消息必须要同步到了ISR中的所有列表时才会认为提交成功,当leader down掉了,就会从ISR中找出一个ID最小的作为Leader,ISR
中follower的数据是同步的.所以只要ISR中有一个follower是工作的还能正常提供服。
1) Producer端使用zookeeper用来"发现"broker列表,以及和Topic下每个partition leader建立socket连接并发送消息.
2) Broker端使用zookeeper用来注册broker信息,已经监测partitionleader存活性.
3) Consumer端使用zookeeper用来注册consumer信息,其中包括consumer消费的partition列表等,同时也用来发现broker列表,并和
partition leader建立socket连接,并获取消息.
Kafka通过Zookeeper实现它的功能的,只要配置好相关的配置文件,Kafka就会与Zookeeper合作完成集群功能的.Kafka会在Zookeeper中生成一堆的目录,每个应用都监控Zookeeper相关目录的变化而作出相应的处理.如:Broker发生变化,
参考原文:http://www.cnblogs.com/likehua/p/3999538.html
发表评论
-
rocketmq安装部署.txt
2021-11-07 19:10 215docker search rocketmq docke ... -
各种MQ应用分式
2018-05-25 16:07 442RabbitMQ RabbitMQ有一个交换机(Exchan ... -
spring kafka 配置详解
2016-09-28 10:24 6260spring kafka 配置详解 使用spring-in ... -
spring-integration-kafka简单应用
2016-09-26 19:52 1271spring-integration-kafka简单应用 ... -
kafka java原生简单应用
2016-09-23 15:10 693kafka java原生简单应用 KafkaTestMa ...
相关推荐
**Kafka Tool 连接 Kafka 工具详解** 在大数据处理和实时流处理领域,Apache Kafka 是一个不可或缺的组件,它作为一个分布式的消息中间件,提供高效、可扩展且可靠的发布订阅服务。为了方便管理和操作 Kafka 集群,...
Apache Kafka 是一个分布式流处理平台,常用于构建实时的数据管道和应用。Kafka 提供了高吞吐量、低延迟的消息传递能力,是大数据领域中重要的消息队列(MQ)解决方案。Kafka-Eagle 是针对 Kafka 集群设计的一款高效...
在IT行业中,Kafka是一种广泛使用的分布式流处理平台,它由Apache软件基金会开发,主要用于构建实时数据管道和流应用。本文将围绕标题和描述中提到的两种Kafka工具——kafkatool-64bit.exe和kafka-eagle-bin-1.4.6....
**Kafka工具详解——Kafkatool** Kafka作为一个分布式流处理平台,广泛应用于大数据实时处理和消息传递。然而,管理Kafka集群和操作其组件(如topics、partitions、offsets等)可能会变得复杂,这时就需要一些可视...
在Spring Boot应用中,我们可以利用Spring Kafka框架来与Apache Kafka进行集成,实现高效的消息传递。本文将详细探讨如何在Spring Boot项目中基于Spring Kafka动态创建Kafka消费者。 首先,了解Kafka基本概念:...
《Kafka技术内幕:图文详解Kafka源码设计与实现》是一本深入解析Apache Kafka的专著,旨在帮助读者理解Kafka的核心设计理念、内部机制以及源码实现。这本书结合图文并茂的方式,使得复杂的概念变得更为易懂。同时,...
**Kafka详细课程讲义** 本课程主要涵盖了Apache Kafka的核心概念、安装配置、架构解析、API使用以及监控与面试知识点,旨在帮助学习者全面理解并掌握这一强大的分布式流处理平台。 **第 1 章 Kafka 概述** Apache...
**Kafka介绍** Apache Kafka是一款高性能、分布式的消息中间件,由LinkedIn开发并捐献给Apache软件基金会。它最初设计的目标是构建一个实时的数据管道,能够高效地处理大量的数据流,同时支持发布订阅和队列模型,...
**Kafka Tool 2.0.7 在 Linux 系统中的使用详解** Kafka Tool 是一款功能强大的 Apache Kafka 管理工具,适用于监控、管理、以及数据迁移等任务。在 Linux 系统中,我们可以方便地利用此工具进行各种 Kafka 相关的...
Kafka自LinkedIn开源以来就以高性能、高吞吐量、分布式的特性著称,本书以0.10版本的源码为基础,深入分析了Kafka的设计与实现,包括生产者和消费者的消息处理流程,新旧消费者不同的设计方式,存储层的实现,协调者...
### 关于Kafka资源下载kafka_2.11-2.0.0.tgz的知识点 #### Kafka简介 Apache Kafka是一种开源的消息队列服务,它最初由LinkedIn开发,并于2011年成为Apache软件基金会的一个顶级项目。Kafka因其高性能、可扩展性和...
在IT行业中,网络通信和大数据处理是两个至关重要的领域,Netty和Kafka分别是这两个领域的佼佼者。Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于开发高并发、低延迟的网络应用,如TCP服务器。而Kafka...
【Kafka基础知识】 Kafka是由Apache开发的分布式流处理平台,它主要被设计用来处理实时数据流。在大数据处理领域,Kafka常被用于构建实时数据管道和流应用,能够高效地处理大量的实时数据。 【Java与Kafka的结合】...
**Kafka 2.5.1 知识点详解** Kafka 是一个分布式流处理平台,由 Apache 软件基金会开发,广泛应用于大数据实时处理、日志收集、消息系统等多个领域。`kafka_2.12-2.5.1` 是 Kafka 的一个特定版本,针对 Scala 2.12 ...
**Kafka概述** Kafka是由LinkedIn开发并贡献给Apache软件基金会的一个开源消息系统,它是一个高性能、可扩展的分布式消息中间件。Kafka最初设计的目标是处理网站活动流数据,但随着时间的发展,它已被广泛应用于...
本文是系列文章的第4篇,第一篇"第二篇第三篇第四篇第五篇第六篇《Kafka设计解析》系列上一篇《Kafka高性能架构之道——Kafka设计解析(六)》从宏观架构到具体实现分析了Kafka实现高性能的原理。本文介绍了Kafka...
《Kafka部署与使用详解》 Kafka是一种分布式流处理平台,广泛应用于大数据实时处理、日志收集、消息系统等领域。这份详尽的PDF文档详细介绍了如何在Linux环境下部署和使用Kafka,包括单机部署和集群部署。 一、...
Kafka是Apache软件基金会开发的一个开源流处理平台,它最初由LinkedIn设计并开源,后来成为顶级项目。这个最新的版本“kafka_2.13-2.6.0.tgz”是一个针对Java 8及以上版本,特别是针对Scala 2.13编译的Kafka发行版,...
《Kafka ARM版:kafka_2.11-1.1.0-aarch64详解》 在当今大数据处理领域,Apache Kafka以其高吞吐量、低延迟和分布式架构的特点,成为实时数据流处理的重要工具。而随着物联网(IoT)的发展,ARM架构的设备在边缘...
Apache Kafka 3.0.0 是一款强大的开源分布式事件流处理平台,它的核心特性在于提供高吞吐量、低延迟的消息传递服务。这个版本的Kafka源代码(kafka-3.0.0-src.tgz)是开发人员深入了解和定制Kafka内部机制的重要资源...