kafka介绍 - 官网

介绍

Kafka是一个分布式的、分区的、冗余的日志提交服务。它使用了独特的设计,提供了所有消息传递系统所具有的功能。

我们先来看下几个消息传递系统的术语:

  • Kafka维护消息类别的东西是主题(topic).
  • 我们称发布消息到Kafka主题的进程叫生产者(producer).
  • 我们称订阅主题、获取消息的进程叫消费者(consumer).
  • Kafka是由多个服务器组成的机器,每个服务器称作代理(broker).

在较高的层次上看,生产者通过网络发送消息到Kafka集群,Kafka集群将这些消息提供给消费者,如下图:

客户端与服务器之间的通信通过一个简单的、高性能的、语言无关的TCP protocol. Kafka有Java 客户端,但这客户端在很多语言many languages也是有效的.

主题(Topics)、日志(Logs)

一个主题就是消息的类别或名称。对每个主题,Kafka集群都管理着一个被分区的日志,如下:

每个分区就是一个提交日志:每个分区上保存着不断被追加的消息,这些消息是有序的且顺序不可改变;分区上的每个消息都被分配了一个序列号offset,offset唯一标识了分区上的消息。

Kafka集群保留所有发布的消息,不管这些消息是否被消费了,直到消息达到了它的存活周期,这个存活周期是可以被配置的。例如,日志被设置保留2天,消息被消费后还将继续存活,直到2天以后它才被删除释放。 数据的大小不会影响Kafka的性能,保留大量数据是没问题的(Kafka‘s performance is effectively constant with respect to data size so retaining lots of data is not a problem)

事实上,在每个消费者上保留的元数据只有offset,它是消费者在日志上的位置。这个offset受消费者控制:正常情况下,随着消费者读取消息offset是线性增长的,但是消费者可以控制offset,消费者可以以任何顺序消费消息。例如,一个消费者可以重置到老的offset来从新执行。

这些特性表明,Kafka的消费者是非常廉价的,一个消费者的创建、销毁不会对集群或其他消费者产生多大的影响。

对日志进行分区有几个目的:

1、扩容,一个主题可以有多个分区,这使得可以保存比一个机器保存的多的多的数据。

2、并行。

分布式(Distribution)

日志的分区分布在Kafka集群的多台机器上,每个机器管理数据和响应分区请求。每个分区冗余存储来保证容错,冗余数可以配置。

每个分区都有一个机器作为leader,零个或多个机器作为follower。leader处理这个分区的读写请求,follower执行leader的指令。如果leader宕机了,followers中的一个将自动成为新的leader。每个机器都是它的分区的leader和其他分区的follower,follower角色用来负载均衡。

生产者(Producers)

生产者发布数据到它们选择的主题上。生产者负责将某条消息分配到某个主题的某个分区上。这可以通过简单的循环的方式来实现,或者使用一些分区方法(比如根据消息的key来分区)

消费者(Consumers)

传统的消息传递有两种方式: 队列(queuing)、发布-订阅(publish-subscribe). 队列方式,一组消费者从机器上读消息,每个消息只传递给这组消费者中的一个;分布-订阅方式,消息被广播到所有的消费者。 Kafka提供了一个消费组(consumer group)的说法来概括这两种方式。

消费者都有一个消费组,主题的每个消息被传递到订阅这个主题的消费组中的一个消费者实例,消费者实例可以是一个单独的进程或一个单独的机器。

如果所有的消费者在同一个组里,这就相当于队列方式,在消费者上的负载均衡。(If all the consumer instances have the same consumer group, then this works just like a traditional queue balancing load over the consumers.)

如果消费者在不同的组里,这就相当于发布-订阅方式,所有的消息将被广播到所有的消费者。(If all the consumer instances have different consumer groups, then this works like publish-subscribe and all messages are broadcast to all consumers.)

一般的情况是,主题有少量的消费组,每个消费组就是一个逻辑上的订阅者。每个消费组由很多消费者组成,有很好的扩展性和容错。. This is nothing more than publish-subscribe semantics where the subscriber is cluster of consumers instead of a single process.


A two server Kafka cluster hosting four partitions (P0-P3) with two consumer groups. Consumer group A has two consumer instances and group B has four.

Kafka比传统的消息传递系统有更好的顺序行保证。

A traditional queue retains messages in-order on the server, and if multiple consumers consume from the queue then the server hands out messages in the order they are stored. However, although the server hands out messages in order, the messages are delivered asynchronously to consumers, so they may arrive out of order on different consumers. This effectively means the ordering of the messages is lost in the presence of parallel consumption. Messaging systems often work around this by having a notion of "exclusive consumer" that allows only one process to consume from a queue, but of course this means that there is no parallelism in processing.

Kafka does it better. By having a notion of parallelism—the partition—within the topics, Kafka is able to provide both ordering guarantees and load balancing over a pool of consumer processes. Kafka将主题下的分区分配给消费组里的消费者,每个分区被一个消费者消费,This is achieved by assigning the partitions in the topic to the consumers in the consumer group so that each partition is consumed by exactly one consumer in the group. By doing this we ensure that the consumer is the only reader of that partition and consumes the data in order. Since there are many partitions this still balances the load over many consumer instances. 消费者的数量不能超过分区数Note however that there cannot be more consumer instances than partitions.

Kafka只能保证分区内的消息是有序的 only provides a total order over messages within a partition, not between different partitions in a topic. Per-partition ordering combined with the ability to partition data by key is sufficient for most applications.如果你想要消息是全局有序的,你可以设置主题只有一个分区,同时这意味着只能有一个消费者。 However, if you require a total order over messages this can be achieved with a topic that has only one partition, though this will mean only one consumer process.

保证(Guarantees)

At a high-level Kafka gives the following guarantees:

  • 生产者发送的消息安装它们发送的顺序追加到主题
  • 消费者看到消息的顺序就是消息在日志中存储的顺序
  • For a topic with replication factor N, we will tolerate up to N-1 server failures without losing any messages committed to the log.

More details on these guarantees are given in the design section of the documentation.

来源: <http://kafka.apache.org/documentation.html#introduction>

时间: 2024-10-27 13:05:51

kafka介绍 - 官网的相关文章

3 kafka介绍

 本博文的主要内容有 .kafka的官网介绍 http://kafka.apache.org/ 来,用官网上的教程,快速入门. http://kafka.apache.org/documentation kafka的官网文档教程. The Producer API allows an application to publish a stream records to one or more Kafka topics. The Consumer API allows an application

程序员必知的技术官网系列--spring篇

进入官网首先看到的是官网的轮播和首页导航,其中首页导航有四个, 下图有详细介绍, 随后也会单独讲解个导航包含的内容,本文只介绍前两个导航栏的内容, 本文只负责介绍官网的页面结构和文章用到的页面的内容翻译来辅助官网内容结构的讲解, 不做具体技术文档的解释, 以后有机会了再做解释. 好了开干. 首页 官网首页导航 看完导航栏后我们先往下滚动可以看到spring全家桶中的三个明星产品:spring boot,spring cloud,spring data flow和一个居中的标题spring:the

Cocos2d 官网介绍,新手必看!!!!!!!!!!!!!!!!!!!!!!!!!

1.之前一直没仔细看cocos2d官网,后来发现很坑 http://cocos2d-x.org/   官网分成英文,中文,还有日本语,建议大家用英语. 我之前给大家做教程,发现下载的一些东西你在中文网站是找不到的. 我们进入这个网站默认是英文的. 2.我们下一步点击Download       我给大家详细介绍一下这些都是什么东西.     ---DOWNLOAD V3.10这是目前官网上最新的框架里面包含了 lua javascript   c++ ---Html5 lite version 

FRM官网教材和参考书介绍

在5月1日garp协会就已经开启2016年11月frm考试的报名,FRM小编来解答大家问的比较多的关于教材方面的问题做了汇总,供各位参考! FRM官网教材和参考书介绍 1.Financial Risk Manager Handbook 2.GARP指定的core reading 3.SCHWESER编写的NOTES frm备考资料的话最好是看是handbook,这是考生最多用的复习教材,而NOTES由SCHWESER公司根据FRM考纲编写的简写本,根据考纲一条一条进行编写,基本上包括了考试中的所

如何评价苹果中国官网 iOS 8 介绍页面的文案「开发者的大事、大快所有人心的大好事」?[转自知乎]

在什么是「苹果式中文」答案中,小七得出了这个结论: 「苹果式中文」是指句子结构破碎,经常缺乏主语,滥用排比,顶真,偏正短语,和不恰当四字词的广告文体. (有关什么是苹果式中文,小七原来贴错地方了TAT,具体分析请移步:什么是「苹果式中文」?) 那么作为广告翻译,苹果做得如何呢? 首先,有个翻译的概念需要向大家普及: 很多知友提出文案有明显的翻译腔,这个说法其实不准够确啊,有关什么是翻译腔,我的分析请移步:什么是「翻译腔」?「翻译腔」是好是坏? 在这里节选原文一段补充说明: 3. 明明能说中文,非

springmvc系列一 之配置介绍(包含官网doc)

1.springmvc 官网参考地址: https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html 2. springmvc 的介绍   Spring Web MVC是基于Servlet API构建的原始Web框架,所以从一开始就包含在spring框架中. 3.DispatcherServlet springmvc像大多数web框架一样,作为一个核心的前端控制器.dispatherServlet 继

『中级篇』docker官网介绍(四)

从docker官网了解docker的历史,为了保证文章的质量,多增加了截图,想让各位老铁看的比较爽--###官网 docker官网介绍 ###分类 社区版(Docker Community Edition (CE) ) 企业版(Docker Enterprise Edition (Docker EE)) ###版本由来最早的docker版本都是从1.0慢慢的累积到1.13,在2017年3月份docker的版本发生了变化变成了版本2017.03版本,也形成了CE和EE版本,从此之后docker的版

001-SpringBoot2入门:一些官网链接参考和介绍

Spring官方文档比较齐全,学习的过程中可以多参考官方文档,最权威的版本.01.Spring Boot的一些官方链接 01.01 Spring Boot官网 https://spring.io/projects/spring-boot 01.02 spring-boot官方github 截至2019-10-20 周日,v2.2.0.RELEASE已发布(2019-10-17) https://github.com/spring-projects/spring-boot 01.03 spring

GitHub官网基本介绍

1.当我们进入官网后会出现登陆的界面,这里我一一来解释大概的意思根据图中顺序来解释(1)是输入用户.邮箱.密码的地方.(2)是当你注册好了之后或者已注册之后点击这里跳转到登陆的界面.(3)是当你第一次使用还没有账号的情况,点击这里进行注册.(4)是登陆GitHub.如果你已经有账号了则直接点击sign in 去登陆就可以了.下面我们将讲解如何注册 2.点击sign up之后出现的这个页面,页面中第一个输入栏输入用户名.第二栏输入你邮箱地址,GitHub是通过邮箱激活方式来注册的,因此邮箱很重要,