kafka权威指南(阅读摘录)

在这里插入图片描述

零复制

Kafka 使用零复制技术向客户端发送消息——也就是说,Kafka 直接把消息从文件(或者更确切地说是 Linux 文件系统缓存)里发送到网络通道,而不需要经过任何中间缓冲区。这是 Kafka 与其他大部分数据库系统不一样的地方,其他数据库在将数据发送给客户端之前会先把它们保存在本地缓存里。这项技术避免了字节复制,也不需要管理内存缓冲区,从而获得更好的性能。

如何选定分区数量

为主题选定分区数量并不是一件可有可无的事情,在进行数量选择时,需要考虑如下几个因素。

  • 主题需要达到多大的吞吐量?例如,是希望每秒钟写入 100KB 还是 1GB ?

  • 从单个分区读取数据的最大吞吐量是多少?每个分区一般都会有一个消费者,如果你知道消费者将数据写入数据库的速度不会超过每秒 50MB,那么你也该知道,从一个分区读取数据的吞吐量不需要超过每秒 50MB。

  • 可以通过类似的方法估算生产者向单个分区写入数据的吞吐量,不过生产者的速度一般比消费者快得多,所以最好为生产者多估算一些吞吐量。

  • 每个 broker 包含的分区个数、可用的磁盘空间和网络带宽。

  • 如果消息是按照不同的键来写入分区的,那么为已有的主题新增分区就会很困难。

  • 单个 broker 对分区个数是有限制的,因为分区越多,占用的内存越多,完成首领选举需要的时间也越长。

消费者数量

我们有必要为主题创建大量的分区,在负载增长时可以加入更多的消费者。不过要注意,不要让消费者的数量超过主题分区的数量,多余的消费者只会被闲置。

跟随者副本

首领以外的副本都是跟随者副本。跟随者副本不处理来自客户端的请求,它们唯一的任务就是从首领那里复制消息,保持与首领一致的状态。如果首领发生崩溃,其中的一个跟随者会被提升为新首领。

Kafka 可以在哪些方面作出保证呢?

  • Kafka 可以保证分区消息的顺序。如果使用同一个生产者往同一个分区写入消息,而且消息 B 在消息 A 之后写入,那么 Kafka 可以保证消息 B 的偏移量比消息 A 的偏移量大,而且消费者会先读取消息 A 再读取消息 B。
  • 只有当消息被写入分区的所有同步副本时(但不一定要写入磁盘),它才被认为是“已提交”的。生产者可以选择接收不同类型的确认,比如在消息被完全提交时的确认,或者在消息被写入首领副本时的确认,或者在消息被发送到网络时的确认。
  • 只要还有一个副本是活跃的,那么已经提交的消息就不会丢失。
  • 消费者只能读取已经提交的消息。

复制机制和分区的多副本架构

Kafka 的复制机制和分区的多副本架构是 Kafka 可靠性保证的核心。把消息写入多个副本可以使 Kafka 在发生崩溃时仍能保证消息的持久性。

使用 Kafka 构建数据管道

在使用 Kafka 构建数据管道时,通常有两种使用场景:第一种,把 Kafka 作为数据管道的两个端点之一,例如,把 Kafka 里的数据移动到 S3 上,或者把 MongoDB 里的数据移动到 Kafka 里;第二种,把 Kafka 作为数据管道两个端点的中间媒介,例如,为了把 Twitter 的数据移动到 ElasticSearch 上,需要先把它们移动到 Kafka 里,再将它们从 Kafka 移动到 ElasticSearch 上。

Kafka 为数据管道带来的主要价值

Kafka 为数据管道带来的主要价值在于,它可以作为数据管道各个数据段之间的大型缓冲区,有效地解耦管道数据的生产者和消费者。Kafka 的解耦能力以及在安全和效率方面的可靠性,使它成为构建数据管道的最佳选择。

ETL 和 ELT

数据管道的构建可以分为两大阵营,即 ETL 和 ELT。 ETL 表示提取—转换—加载(Extract-Transform-Load),也就是说,当数据流经数据管道时,数据管道会负责处理它们。这种方式为我们节省了时间和存储空间,因为不需要经过保存数据、修改数据、再保存数据这样的过程。不过,这种好处也要视情况而定。有时候,这种方式会给我们带来实实在在的好处,但也有可能给数据管道造成不适当的计算和存储负担。这种方式“有一个明显不足,就是数据的转换会给数据管道下游的应用造成一些限制,特别是当下游的应用希望对数据进行进一步处理的时候。假设有人在 MongoDB 和 MySQL 之间建立了数据管道,并且过滤掉了一些事件记录,或者移除了一些字段,那么下游应用从 MySQL 中访问到的数据是不完整的。如果它们想要访问被移除的字段,只能重新构建管道,并重新处理历史数据(如果可能的话)。
ELT 表示提取—加载—转换(Extract-Load-Transform)。在这种模式下,数据管道只做少量的转换(主要是数据类型转换),确保到达数据池的数据尽可能地与数据源保持一致。这种情况也被称为高保真(high fidelity)数据管道或数据湖(data lake)架构。目标系统收集“原始数据”,并负责处理它们。这种方式为目标系统的用户提供了最大的灵活性,因为它们可以访问到完整的数据。在这些系统里诊断问题也变得更加容易,“因为数据被集中在同一个系统里进行处理,而不是分散在数据管道和其他应用里。这种方式的不足在于,数据的转换占用了目标系统太多的 CPU 和存储资源。有时候,目标系统造价高昂,如果有可能,人们希望能够将计算任务移出这些系统。

数据管道

数据管道最重要的作用之一是解耦数据源和数据池。

留待实战内容

连接器示例——从MySQL到ElasticSearch

broker最重要的度量指标

如果说 broker 只有一个可监控的度量指标,那么它一定是指非同步分区的数量。该度量指明了作为首领的 broker 有多少个分区处于非同步状态。这个度量可以反映 Kafka 的很多内部问题,从 broker 的崩溃到资源的过度消耗。

集群问题

集群问题一般分为以下两类:

  • 不均衡的负载。
  • 资源过度消耗。

流入和流出速率

流出速率也包括副本流量,也就是说,如果所有主题都设置了复制系数 2,那么在没有消费者客户端的情况下,流出速率与流入速率是一样的。

流式处理

流式处理是指实时地处理一个或多个事件流。流式处理是一种编程范式,就像请求与响应范式和批处理范式那样。

只要持续地从一个无边界的数据集读取数据,然后对它们进行处理并生成结果,那就是在进行流式处理。重点是,整个处理过程必须是持续的。

表与流

在将表与流进行对比时,可以这么想:流包含了变更——流是一系列事件,每个事件就是一个变更。表包含了当前的状态,是多个变更所产生的结果。所以说,表和流是同一个硬币的两面——世界总是在发生变化,用户有时候关注变更事件,有时候则关注世界的当前状态。如果一个系统允许使用这两种方式来查看数据,那么它就比只支持一种方式的系统强大。

时间窗口

如果“移动间隔”与窗口大小相等,这种情况被称为“滚动窗口(tumbling window)”。如果窗口随着每一条记录移动,这种情况被称为“滑动窗口(sliding window)”。

变更数据捕捉(Change Data Capture)

如果能够捕捉数据库的变更事件,并形成事件流,流式处理作业就可以监听事件流,并及时更新缓存。捕捉数据库的变更事件并形成事件流,这个过程被称为 CDC——变更数据捕捉(Change Data Capture)。

基于时间窗口的连接(windowed-join)

如果要连接两个流,那么就是在连接所有的历史事件——将两个流里具有相同键和发生在相同时间窗口内的事件匹配起来。这就是为什么流和流的连接也叫作基于时间窗口的连接(windowed-join)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/64257.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【js小游戏案例】js迷宫二:当迷宫遇上算法

序幕: 在上次用js开发固定迷宫时就想,这样的死迷宫不能称之为迷宫,如何让这个迷宫动起来呢? 让浏览器每次刷新时,通过计算重新生成一个迷宫,但这样有个问题,每次动态生成的迷宫必须保证它是通…

Linux的shell脚本常用命令

1、前提 使用shell脚本可以将所要执行的命令行进行汇总,统一执行,制作为脚本工具,简化重复性工作 1.1、常用命令 1.1.1、启动命令 假设我们拥有一个halloWord.sh的脚本,通过cd 命令进入相对应的目录下 ./halloWord.sh1.1.2、…

Apipost接口自动化测试入门

今天我们来聊一聊接口自动化测试。以往我们都是以以代码的形式编写自动化测试脚本做自动化测试,网上也有非常多的攻略,那么在不会代码的情况下该怎么做接口自动化呢,今天给大家介绍Apipost自动化测试模块,不用写代码也能做接口自动…

字节C++后端面试总结

字节的面经,技术栈是 C++ 后端。 计算机网络 UDP和TCP区别 先说了概念一个是面向连接的基于字节流的可靠连接,一个是不需要连接的基于数据报的不可靠传输 然后说了几个小点,比如首部长度、应用场景、服务对象什么的。 补充: 还有一个很重要的点:UDP 的实时性比 TCP 好…

微服务技术栈(1.0)

微服务技术栈 认识微服务 单体架构 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署 优点: 架构简单部署成本低 缺点: 耦合度高 分布式架构 分布式架构:根据业务功能对系统进行拆分&#xff0c…

鉴源实验室|公钥基础设施(PKI)在车联网中的应用

作者 | 付海涛 上海控安可信软件创新研究院汽车网络安全组 来源 | 鉴源实验室 01 PKI与车联网 1.1 PKI概述 公钥基础设施(PKI ,Public Key Infrastructure)是一种在现代数字环境中实现认证和加密的基本框架,主要用于保护网络交互和通信的安…

Mac电脑怎么使用“磁盘工具”修复磁盘

我们可以使用“磁盘工具”的“急救”功能来查找和修复磁盘错误。 “磁盘工具”可以查找和修复与 Mac 磁盘的格式及目录结构有关的错误。使用 Mac 时,错误可能会导致意外行为,而重大错误甚至可能会导致 Mac 彻底无法启动。 继续之前,请确保您…

Flutter父宽度自适应子控件的宽度

需求: 控件随着金币进行自适应宽度 image.png 步骤: 1、Container不设置宽度,需要设置约束padding; 2、文本使用Flexible形式; Container(height: 24.dp,padding: EdgeInsetsDirectional.only(start: 8.dp, end: 5.d…

LISA:通过大语言模型进行推理分割

论文:https://arxiv.org/pdf/2308.00692 代码:GitHub - dvlab-research/LISA 摘要 尽管感知系统近年来取得了显著的进步,但在执行视觉识别任务之前,它们仍然依赖于明确的人类指令来识别目标物体或类别。这样的系统缺乏主动推理…

跨境商城系统源码的优势,助力企业海外扩张

跨境电商发展背景与趋势 随着全球化的推进和互联网技术的快速发展,跨境电商已成为企业海外拓展的重要途径。然而,跨境电商面临着诸多挑战,如复杂的海外市场、文化差异、海关监管等。为了解决这些问题,企业可以借助跨境商城系统源码…

FOHEART H1数据手套:连接虚拟与现实,塑造智能交互新未来

在全新交互时代背景中,数据手套无疑是一种重要的科技产物。它不仅彻底改变了我们与虚拟世界的互动方式,更为我们提供了一种全新、更为直观的交互形式。 FOHEART H1数据手套结合了虚拟现实、手势识别等高新技术,用先进的传感技术和精准的数据…

TeeChart NET for MAUI Crack

TeeChart NET for MAUI Crack 跨平台图表-移动或桌面应用程序的核心图表代码相同。 图表集合-60多种图表类型和50多种财务和统计指标。 图表类型 60多种2D和3D图表类型以及多种组合,包括: 标准:线条(条形)、条形、区域、饼图、快线、点(散点…

LVS集群

目录 1、lvs简介: 2、lvs架构图: 3、 lvs的工作模式: 1) VS/NAT: 即(Virtual Server via Network Address Translation) 2)VS/TUN :即(Virtual Server v…

三极管从入门到精通

文章目录 摘要1 基础1.1 PN结1.2 三极管 2 三极管模拟电路知识2.1 I-V特性曲线2.2 极限参数解释2.3 基本共射极放大电路2.4 小信号模型2.5 用小信号模型分析基本共射极放大电路 3 三极管实际模拟电路应用图3.1 共射极放大电路3.1.1 基本共射极放大电路3.1.2 基极分压式射极偏置…

实际工作中通过python+go-cqhttp+selenium实现自动检测维护升级并发送QQ通知消息(程序内测)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 首先,今年比较忙没有多余时间去实操创作分享文章给大家,那就给大家分享下博主在实际工作中的一点点内容吧,就当交…

架构训练营学习笔记:5-1 计算架构模式之多级缓存架构

序 本节主要是计算架构。 多级缓存架构 缓存与缓冲:通常场景是读缓存,写缓冲。 缓存技术的本质:空间换时间,因此缓存架构属于高性能计算 架构。 缓存设计框架 主要考虑存什么?存多久?存哪里?如…

成品短视频App源码开发:一步步教你搭建短视频平台

近年来,短视频平台的兴起迅速改变了人们对视频内容的获取方式,成品短视频App源码的开发也因此备受瞩目。对于希望快速搭建短视频平台的创业者来说,使用成品短视频App源码是一个明智的选择。 成品短视频App源码为您提供了一个基于现有技术和功…

vue3+antd——实现个人中心页面+同步更改头部用户信息——基础积累

之前写过一篇文章关于vue3antd的框架模板,链接如下:http://t.csdn.cn/9dZMS 首先感谢大神提供的后台管理系统的模板,在此基础上改动要简单很多,主要是自己有很多内容不太敢随意改动。。。 直接看【个人中心】页面的效果图&#…

[迁移学习]领域泛化

一、概念 相较于领域适应,领域泛化(Domain generalization)最显著的区别在于训练过程中不能访问测试集。 领域泛化的损失函数一般可以描述为以下形式: 该式分为三项:第一项表示各训练集权重的线性组合,其中π为使该项最小的系数&a…

【Docker系列】push镜像报错问题解决方案

1 问题描述 docker push 报这个错,unknown blob 详细报错内容: Use docker scan to run Snyk tests against images to find vulnerabilities and learn how to fix them The push refers to repository [192.******/*******/*************] 3b3341e9d03…