kafka概念原理

为什么需要消息系统:由于消息发送者不需要等待消息接收者处理数据就可以返回,系统具有更好的响应延时,同时,在网站访问高峰,消息可以暂时存储在消息队列中等待消息接收者根据自己负载处理能力控制消息处理速度,减轻数据库等后端存储的负载压力

1.解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

2.冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。

3.扩展性:因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可。

4.灵活性 & 峰值处理能力:在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

5.可恢复性:系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

6.顺序保证:在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。(Kafka 保证一个 Partition 内的消息的有序性)

7.缓冲:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。

8.异步通信:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

kafka的关键特性:

1.kafka具有近乎实时性的消息处理能力。kafka将消息保存在磁盘中。采用顺序读写的访问磁盘。从而避免了随机读写磁盘的性能瓶颈。

2.kafka支持批量读写消息。并且会对消息进行批量压缩。这样提高了网络的利用率。也提高了压缩效率。

3.kafka支持消息分区。分区之间可以并发操作。支持现在扩容

4.kafka支持副本。每个分区都有自己的副本。副本中有一个负责读写的leader。其他副本负责与Leader进行同步。

kafka相关的原因:

1.producer:消息生产者,发布消息到 kafka 集群的终端或服务。

2.broker:kafka 集群中包含的服务器。

3.Topic(话题):每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的。

4.partition:partition 是物理上的概念,每个 topic 包含一个或多个 partition。kafka 分配的单位是 partition。

5.consumer:从 kafka 集群中消费消息的终端或服务。

6.Consumer group:high-level consumer API 中,每个 consumer 都属于一个 consumer group,每条消息只能被 consumer group 中的一个 Consumer 消费,但可以被多个 consumer group 消费。

7.replica:partition 的副本,保障 partition 的高可用。

8.leader:replica 中的一个角色, producer 和 consumer 只跟 leader 交互。

9.follower:replica 中的一个角色,从 leader 中复制数据。

10.controller:kafka 集群中的其中一个服务器,用来进行 leader election 以及 各种 failover。

11.ISR:In-Sync-Replica集合表示的是目前”可用“(alive)且消息量与leader相差不多的副本集合。这是整个副本集合的一个子集。”可用“和”相差“不多都是很模糊的描述,其实际含义是ISR集合中的副本必须满足下面两个条件:

(1)副本所在节点必须维持着与zookeeper的连接

(2)副本最后一条消息的offset与Leader副本的最后一条消息的offset之间的差异不能超出指定的阈值。

12.HW(HighWatermark)和LEO与上面的ISR集合紧密相关。HW标记了一个特殊的offset。当消费者处理消息的时候,只能拉取到HW之前的消息。HW之后的消息对消费者来说是不可见的。与ISR集合类似,HW也是由Leader副本管理的。当ISR集合中全部的Follower副本都拉取HW指定的消息进行同步后。Leader副本会递增HW的值。kafka官网网站将HW之前的消息的状态称为"commit",其含义是这些消息在多个副本中同时存在,即使此时Leader副本损坏,也不会出现数据丢失。

13.LEO(Log End Offset)是所有的副本都会有的offset标记。它指向追加到当前副本的最后一个消息的offset。当生产者向Leader副本追加消息的时候。Leader副本的LEO的标记会递增。当Follower副本成功从Leader副本拉取消息并更新到本地的时候。Follower副本的LEO就会递增。

14.zookeeper:kafka 通过 zookeeper 来存储集群的 meta 信息。

15.Push  推送数据

16.Pull (fetch)拉数据

17.Append   追加

18.stack栈和queue队列     队列先进先出,栈先进后出

时间: 2024-09-30 16:16:04

kafka概念原理的相关文章

【转】kafka概念入门[一]

转载的,原文:http://www.cnblogs.com/intsmaze/p/6386616.html ----------------------------------------------------------------------------------------------------- Kafka概念入门(一) 序:如何保证kafka全局消息有序? 比如,有100条有序数据,生产者发送到kafka集群,kafka的分片有4个,可能的情况就是一个分片保存0-25,一个保存2

Kafka详细原理总结

Kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统.低延迟的实时系统.storm/Spark流式处理引擎,web/nginx日志.访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目. 1.前言 消息队列的性能好坏

Kafka详细原理

Kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统.低延迟的实时系统.storm/Spark流式处理引擎,web/nginx日志.访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目. 1.前言 消息队列的性能好坏

NoSQL之Redis---持久化(persistence)概念原理

[不忘初心] 在Redis的命令中还有关于服务器的命令我们未做介绍,是由于其中的部分命令涉及持久化,集群等方面的内容.因此,本文我们就先来看看持久化部分的内容.好了,废话不表,马上开始我们的正文部分吧! ------------------------------------------------------------------------------------------------------------------------------------- 前言 本文提供关于Redis

SQL Server 统计信息(Statistics)-概念,原理,应用,维护

前言:统计信息作为sql server优化器生成执行计划的重要参考,需要数据库开发人员,数据库管理员对其有一定的理解,从而合理高效的应用,管理. 第一部分 概念 统计信息(statistics):描述某个(些)栏位,索引的数据分布情况.优化器用其评估生成高效执行计划. 密度(density):一个比率值,显示在一个(组)列中有多少唯一值.(实际应用中值越小越好) Density = 1 / Number of distinct values for column(s) 直方图(histogram

Docker 系列一(概念原理和安装)

一.概念原理 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口.—— 百度百科 之前一直有一个误区,老听人说 Docker 是一个容器,应用程序打包好镜像,然后在这个容器中运行,以此达到 "一次封装,处处运行"(Build,Ship and Run Any App,Anywhere)的目的.其实不然,Docker 只是一个应用程序引擎(

一种实现人工智能程序自进化的概念原理

本文主要论述五点: 1.能自我学习自我控制自我进化的信息处理控制能力就叫智能: 2.实现人工智能程序自进化的模式是程序自己修改自己的自循环: 3.智能算法通过若干子系统的功能实现自循环: 4.人工智能“学习”的机制过程(算法)和“学习”的结果(训练数据.大数据)都直接影响其功能: 5.智能认知系统是信息社会的未来.是科技的未来. 能自我学习自我控制自我进化(自我进化包含了自我评价机制)的信息处理(信息感知.信息识别.信息拓展等)控制能力就叫智能.智能是带有不可预知性的,就象人学习,不同的人看同一

Apache kafka 工作原理介绍

消息队列 消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上, 队列存储消息直到它们被应用程序读走.通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置.或在继续执行前不需要等待接收程序接收此消息.在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境下的分布式应用提供有效的通信手段.为了管理需要共享的信息,对应用提供公共的信息交换机制是重要的.常用的消息队列技术是 Message Queue. Message Queue 的通讯模式 点对点通讯:点对

Apache kafka 工作原理介绍(作者原创文章已发表在IBM开发者论坛)

插个广告:本人的<大话Java性能优化>一书99万字,已经在亚马逊.当当.京东.天猫,感谢对技术推广梦想者的支持,谢谢! 消息队列 消息队列技术是分布式应用间交换信息的一种技术.消息队列可驻留在内存或磁盘上, 队列存储消息直到它们被应用程序读走.通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置.或在继续执行前不需要等待接收程序接收此消息.在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境下的分布式应用提供有效的通信手段.为了管理需要共享的信息,对应用提供公共的信息交