Kafka 博文索引
博文索引
Kafka 简介
数据是系统的燃料,系统的效率高低很大程度取决于数据流转是否及时:
- 将数据从生产源头移动到分析处理终端,这个过程完成得越快,组织的反应就越敏捷。
- 移动工具越是简单易用,花费在数据移动上的精力就越少,开发者就越能专注于核心业务。
Kafka 是一款为数据整合而生的基于发布与订阅的消息系统Messaging System,方便用户在多系统间实现松散耦合的异步数据传输。
Kafka 为消息提供顺序持久化保存,可按需读取。并通过集群部署与冗余副本保障数据安全并提供性能伸缩能力。

核心概念
消息
message:最基本的数据单元,由字节数组组成。消息可以有一个可选的键key,键也是一个字节数组。主题
topic:消息通过主题进行分类。主题就好比数据库的表,或者文件系统里的文件夹。分区
partition:一个提交日志,主题可以被分为若干个分区。消息以追加的方式写入分区尾部,然后以先入先出的顺序读取。偏移
offset:一个不断递增的整数值,在创建消息时指定。同个分区中每个消息的偏移量都是唯一的。生产者
producer:创建消息并将其发布到一个特定的主题上。消费者
consumer:订阅主题并按照消息生成的顺序读取消息。
消息分区
Kafka 通过分区来实现 数据冗余 和 可伸缩性:分区可以分布在不同的服务器上,一个主题可以横跨多个服务器,以此来提供比单个服务器更强大的性能。

要注意,由于一个主题一般包含几个分区,因此无法在整个主题范围内保证消息的顺序。生产者在默认情况下,会把消息均衡地分布到主题的所有分区上,而并不关心特定消息会被写到哪个分区。
为了保证消息顺序可控,可以为同类消息指定相同的键,然后生产者会根据键的 hashmod 结果选取分区,从而保证具有相同键的消息总会被写到相同的分区上。
消费者组
每个分区只能被分配给一个消费者,然后消费者会按照消息生成的顺序读取它们。
过程中,消费者会记录已读消息的偏移量,避免重复消费同一条消息。

消息系统中常见的通信模型有两种:
- 消息队列
message queue:点对点point to point的排他通信,每条消息只会被消费一次。 - 发布/订阅
pub/sub:类似广播通信,每条消息可能会被消费多次。

为了同时支持这两种模式,Kafka 在消费者端引入了 消费者组群counsumer group这一逻辑概念:
- 不同的消费者组群之间彼此互不相关,两者消费到的消息是一致的,此时相当于实现了发布/订阅模型。
- 而同个组群的消费者之间存在互斥关系,每个消费者只能消费部分数据,此时相当于实现了消息队列模型。
集群
一个独立的 Kafka 服务器被称为 broker,其主要职责有两个:
- 接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。
- 为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息。

为保证可用性,broker 以集群的方式部署。每个集群会自动选举出一个 controller 负责管理工作,包括将分区分配给 broker 和监控 broker。
一个分区从属于一个 broker,该 broker 被称为分区的 leader。
如果分区允许多副本replica,这些副本会分布在多个 broker 上,此时会发生分区复制replication。
这种复制机制为分区提供了消息冗余,当 leader 失效时分区会被其他 broker 接管,相关的消费者和生产者都会重连新的 leader。
优势
- 系统解耦:异构系统可以通过 Kafka 进行通信,减少系统之间协调与开发成本。
- 模型丰富:通过消费者组的概念,一份数据可以同时支持不同的通信模型,同能够满足不同的应用需求
- 磁盘存储:Kafka 会将消息持久化到磁盘,允许消息积压并保证数据不会丢失,无需担心生产与消费速率不匹配的问题。
- 横向扩展:Kafka 通过集群与分区的方式实现了横向扩展,并且可以在线对集群进行扩容。
Kafka 博文索引的更多相关文章
- Redis 博文索引
博文索引 Redis 对象与编码 Redis 持久化 Redis 主从复制 Redis 哨兵 Redis 缓存淘汰 Redis 集合统计 Redis 简介
- Lodop的JS模版代码、文档式模版 生成加载赋值博文索引
Lodop获取全部JS代码,传统JS模版的生成.LODOP设置打印设计返回JS代码是变量 LodopJS代码模版的加载和赋值 Lodop生成文档式模版 LodopJS文档式模版的加载和赋值 由于加载J ...
- 手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统系列博文索引
近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座,来讲解如何利用FineUI快速开 ...
- Jmeter博文索引~基础知识和实践操作汇总
所有Jmeter笔记的目录/索引 一,基础操作和常用操作 Jmeter入门(一)理论基础 Jmeter安装及配置(含JDK安装) Jmeter之设置线程组运行次数/时间 Jmeter之参数化(4种设置 ...
- 【非lodop的】JS和html相关博文索引
JS: eval()方法:JS-JAVASCRIPT的eval()方法. Date()对象.getFullYear() 方法.getDate()方法.console.dir()方法:LODOP打印用J ...
- Kafka索引设计的亮点
前言 其实这篇文章只是从Kafka索引入手,来讲述算法在工程上基于场景的灵活运用.单单是因为看源码的时候有感而写之. 索引的重要性 索引对于我们来说并不陌生,每一本书籍的目录就是索引在现实生活中的应用 ...
- Kafka技术内幕 读书笔记之(六) 存储层——日志的读写
-Kafka是一个分布式的( distributed ).分区的( partitioned ).复制的( replicated )提交日志( commitlog )服务 . “分布式”是所有分布式系统 ...
- mysql 索引笔记
MyISAM引擎的B+Tree的索引 通过上图可以直接的看出, 在MyISAM对B+树的运用中明显的特点如下: 所有的非叶子节点中存储的全部是索引信息 在叶子节点中存储的 value值其实是 数据库中 ...
- Kafka日志段读写分析
引子 之所以写这篇文章是因为之前面试时候被面试官问到(倒)了,面试官说:"你说你对Kafka比较熟?看过源码? 那说说kafka日志段如何读写的吧?" 我心里默默的说了句 &quo ...
随机推荐
- Java异常处理场景中不同位置的返回值详细解析
Java 异常处理中的返回值在不同位置不同场景下是有一些差别的,这里需要格外注意 具体分以下两种场景: 1 finally语句块没有return语句,即当代码执行到try或者catch语句块中的ret ...
- JWT令牌简介及demo
一.访问令牌的类型 二.JWT令牌 1.什么是JWT令牌 JWT是JSON Web Token的缩写,即JSON Web令牌,是一种自包含令牌. JWT的使用场景: 一种情况是webapi,类似之 ...
- python-列表包字典-根据字典的某一个键的值来进行排序
python-列表包字典-根据字典的某一个键的值来进行排序 列表包字典的数据结构 要实现按照字典中的某一个键所对应的值进行排序 有两种办法 方法一,使用列表的sort方法 由小到大排 列表.sort( ...
- Py数据类型—整形与字符串
数据类型 在指针的右边输入.可以触发功能列表: 数字(整形):也就是123之类的,不能是abcd和中文之类的,数据类型为int 1.强制字符转换 a="123" b=int(a) ...
- NOIP2020 T2 字符串匹配题解
首先考虑O(n^3)的暴力怎么写. 显然,可以枚举字符串\(A\)+\(B\)的右端点,左端点显然是1,暴力判断是否能与后面的字符构成循环节,对于满足 \(k*(A+B)+C=\) 整个字符串\((k ...
- 请谨慎使用 avaliable 方法来申请缓冲区
问题 今天开始尝试用 Java 写 http 服务器,开局就遇到 Bug. 我先写了一个多线程的.BIO 的 http 服务器,其中接收请求的部分,会将请求的第一行打印出来. 下面是浏览器发出的请求和 ...
- JAVA不可不知的强软弱虚四种引用
一个变量指向new对象,就是引用,在java中有四种引用,分别是强软弱虚,常见的Object o = new Object(),就是强引用,垃圾回收的时候,强引用不会被回收. 公用类: publi ...
- 列表,元祖,range
列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li = ['alex',12 ...
- LOJ10074架设电话线
USACO 2008 Jan. Silver 在郊区有 N 座通信基站,P 条双向电缆,第 i 条电缆连接基站 Ai 和 Bi.特别地,1 号基站是通信公司的总站,N 号基站位于一座农场中.现在, ...
- FLOYD判圈
转载一篇博客:http://blog.csdn.net/javasus/article/details/50015687 Floyd判圈算法(Floyd Cycle Detection Algorit ...