Kafka 文档引言
原文地址:https://kafka.apache.org/documentation.html#semantics
1、开始
1.1 引言
Kafka是一个分布式,分区队列,冗余备份的消息存储服务。它是一个有独特设计的消息系统。
这是什么意思呢?
首先我们介绍下相关的基本通信概念:
1.Kafka按主题分布消息。
2.生产者发布消息给Kafka主题。
3.消费者订阅并处理被提供的发布出的信息。
4.Kafka作为由一个或多个中介服务的集群运行。
然后,深入一些,生产者通过网络发送消息给用于提供给消费者服务的Kafka集群,如图:
在客户端和服务器之间只是进行高性能,与语言无关的TCP协议通信。
主题和消息存储
让我们先看看Kafka上层的概念---主题
主题是消息被发布到的分类或空间。对于每个主题,Kafka集群都维护一个如下图的分段空间:
每个分段空间都是有序的,消息按固定的顺序不停的附加到消息存储位置。分段空间中的所有消息都会分配一个顺序ID用来在分段中唯一标示每一条消息。
无论发布的消息是否被消费,它们都会被Kafka集群根据配置保留一段时间。比如,消息保留设置为两天,那么从发布时开始到被丢弃释放空间,有两天时间消息对消费者都是可用的。数据的大小对Kafka性能的稳定没有太大影响,保持大量数据也不会造成问题。
事实上,消费者仅持有基本的描述存储的消费指向的元数据---偏移量。偏移量由消费者控制:一般情况下,消费者读取消息时偏移量也会线性增加,但事实上是否线性是由消费者控制的,它可以按照它希望的任何顺序消费消息。例如,消费者可以重置偏移量来重新消费消息。
这些设计使得Kafka的消费者负担很小,它们运行几乎不会受到集群或其他消费者的影响。例如,你可以在不影响现有消费者消费的情况下,在命令行工具中跟踪任何主题的内容。
分布式
存储消息的分区分布在Kafka的服务器集群上,集群中的每个服务器处理分配给它的数据和请求。同时,用于容错,每个分区的数据都可以配置在一定数量的服务器上做备份。
每个分区都是由一个中心服务器和不定数量的从服务器组成。中心服务器处理所有对分区的读写请求并分发给从服务器。如果中心服务器挂了,从服务器中会自动选举一个成为新的中心服务器。通过这种方式,将集群中的中心服务器和从服务器负载均衡。
生产者
生产者发布消息到选定的主题。它负责选取消息分配到所选主题的分区中。分配的方式可以是循环的平均分配,也可能是通过一些分区函数(常说的基于消息中的一些KEY)。更常见的是通过权重。
消费者
消息通讯通常有两种模式:消息队列和发布订阅。消息队列的方式,有一个消费者池从服务器读取消息,每个消息最终都会被池中的某一个消费者消费。发布订阅方式,消息会广播给所有消费者。Kafka中充当消费者的是消费者组,它同时支持这两种模式。
消费者使用消费者组名订阅消息,每个发布给主题的消息都会发送给已订阅的消费者组中的一个消费者实例。消费者实例可以在独立的进程或独立的机器中。
如果所有的消费者都在一个消费者组中,那就如普通的消息队列对所有消费者做了负载均衡一样。
如果所有的消费者都在不同的消费者组中,结果就如发布订阅方式相同,消息被广播给所有的消费者。
相比这两种情况,更常见的是,每个主题都有少量消费者组作为逻辑订阅者。考虑到扩展和容错,每个组由多个消费者实例组成。其实,这只是订阅发布过程中的订阅方从单一变为了由消费者集群组成而已。
一个两台服务器的Kafka 集群分4个分段(P0-P3)带两个消费者组。消费者组A有两个消费者实例组B有4个。
Kafka 比传统消息系统在消息顺序的保障上更健壮。
传统的消息队列维持消息在服务器端有序,多个消费者从服务器端维持有序存储消息的队列中消费。虽然服务器端有序的维护消息,单消息被异步发送给消费者,于是消息难以有序的到达不同的消费者。这意味着在并行消费的过程中,消息的有序性被破坏了。消息系统通常处理这种情况是以独占消费的方式在单个过程中只允许从一个队列消费,只是这样就不能并发处理消息了。
Kafka 在这点上做的更好。主题内分区本身就带有并行的意味。Kafka 既可以保证消息的顺序又可以为消费者进程池做负载均衡。通过将主题中的分区分配给消费者组中的消费者可以做到每一个分区能准确的被消费者组中的一个消费者消费。通过这种方式,我们确保分区只能被一个消费者按顺序读取并消费。多个分区会均衡的负载给多个消费者实例。然而,值得注意的是,消费者实例不能比分区的数量多。
Kafka 只提供一个分区内消息的绝对顺序,而不是一个主题中不同分区的。分区通过索引结合KEY的方式提供分区数据来满足更多的应用。也就是说,想在一个主题内保证消息顺序,那就只能有一个分区,同时也意味着只能有一个消费者进程。
保证声明
Kafka 可以确保下列情况:
消息被生产者发送给特定的主题分区,然后会按照发送的顺序被加入分区中。
消费者实例按照存储也就是加入顺序获取到消息。
对于一个有N个节点的主题,可以支持宕掉N-1个服务器而不丢失任何被提交的信息。
更多保证信息会在文档的设计部分列出。
待续。。。
Kafka 文档引言的更多相关文章
- Kafka 文档用例
1.2 用例 以下是一些Kafka 常见的用例.关于功能方面的一些概念,可以看这篇博客:http://engineering.linkedin.com/distributed-systems/log- ...
- kafka文档(转)
来自:http://www.inter12.org/archives/842 一 BROKER 的全局配置 最为核心的三个配置 broker.id.log.dir.zookeeper.connect ...
- Kafka 技术文档
Kafka 技术文档 目录 1 Kafka创建背景 2 Kafka简介 3 Kafka好处 3.1 解耦 3.2 冗余 3.3 扩展性 3.4 灵活性 & 峰值处理能力 3.5 可恢复性 ...
- kafka单机部署文档
单机Kafka部署文档 最简单的使用方式,单机,使用自带的zookeeper 1.解压 下载地址:http://pan.baidu.com/s/1i4K2pXr tar –zxvf kafka_2.1 ...
- kafka集群搭建文档
kafka集群搭建文档 一. 下载解压 从官网下载Kafka,下载地址http://kafka.apache.org/downloads.html 注意这里最好下载scala2.10版本的kafka, ...
- 生成kafka内部请求与响应的接口文档
生成kafka内部请求与响应的接口文档 /** */ package com.code260.ss.kafka10demo; import java.io.File; import java.io.I ...
- 石墨文档Websocket百万长连接技术实践
引言 在石墨文档的部分业务中,例如文档分享.评论.幻灯片演示和文档表格跟随等场景,涉及到多客户端数据同步和服务端批量数据推送的需求,一般的 HTTP 协议无法满足服务端主动 Push 数据的场景,因此 ...
- 简体中国版文档的Markdown语法
Markdown文件 注意︰这是简体中国版文档的Markdown语法.如果你正在寻找英语版文档.请参阅Markdown︰ Markdown: Syntax. Markdown: Syntax 概述 哲 ...
- linkedin开源的kafka-monitor安装文档
linkedin开源的kafka-monitor安装文档 linkedin 开源的kafka-monitor的安装使用可以参考官方的readme:流程介绍的已经比较清楚,但是还是有一些地方需要修正.让 ...
随机推荐
- Castle Core 4.0.0 alpha001发布
时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本, https://github.com/castleproject/Core/releas ...
- 利用SQLServer数据库发送邮件
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 这个应用案例很多,一般都是预警,比如异常连接的时候,或者数据库报错的时候.等等,,, 先 ...
- 用html5的canvas和JavaScript创建一个绘图程序
本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...
- jQuery学习之路(6)- 简单的表格应用
▓▓▓▓▓▓ 大致介绍 在CSS技术之前,网页的布局基本都是依靠表格制作,当有了CSS之后,表格就被很多设计师所抛弃,但是表格也有他的用武之地,比如数据列表,下面以表格中常见的几个应用来加深对jQue ...
- 开始学nodejs——net模块
net模块的组成部分 详见 http://nodejs.cn/api/net.html 下面整理出了整个net模块的知识结构,和各个事件.方法.属性的用法 net.Server类 net.Socket ...
- 以项目谈WebGIS中Web制图的设计和实现
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景介绍 一般WebGIS项目中,前端展示数据的流程基本是先做数据入 ...
- 来自于微信小程序的一封简讯
9月21晚间,微信向部分公众号发出公众平台-微信应用号(小程序)的内测邀请,向来较为低调的微信在这一晚没人再忽视它了. 来自个人博客:Damonare的个人博客 一夜之间火了的微信应用号你真的知道吗? ...
- [译]处理文本数据(scikit-learn 教程3)
原文网址:http://scikit-learn.org/stable/tutorial/text_analytics/working_with_text_data.html 翻译:Tacey Won ...
- ExtJS 项目准备工作(一)
首先,需要从网上下载两个文件,一个是SenchaCmd-6.2.0-windows-64bit(我的电脑是window 10 64位) 另一个是ExtJs6的源码包(ext-6.0.0.415). 源 ...
- Oozie分布式任务的工作流——Spark篇
Spark是现在应用最广泛的分布式计算框架,oozie支持在它的调度中执行spark.在我的日常工作中,一部分工作就是基于oozie维护好每天的spark离线任务,合理的设计工作流并分配适合的参数对于 ...