Kafka第一讲:应用场景及架构设计详解

news2024/11/26 10:28:04

        本节是Kafka专题第一篇,主要介绍Kafka的发展历史、应用场景以及Kafka的基本架构,后续还会对Kafka的生产者、Broker、消费者、集群做详细讲解,敬请期待。

1.kafka的发展历史及应用场景

1.1kafka的定位

        可以实现如下功能:

1.2为什么叫kafka?

        通过Scala语言编写。

1.3 kafka的应用场景

2.Kafka管理界面

2.1管理工具

2.2命令窗口 

2.2.1bin目录

        这些脚本是对java命令的一些封装,例如生产端、消费端、zk、测试工具等一些列命令。

        通过vim命令进去查看,可以看到命令的底层是.jar文件(运行命令实际就是运行一些java的jar包,里面是用shell脚本写的)。

3.kafka架构

3.1Kafka架构图

      注意:partition的leader如果没挂,那么partition的副本只同步数据(做灾备),不能被消费;如果leader挂了,副本才有可能成为leader被消费。

3.2Broker

        1.Kafka采用批量发送的方式(攒够一定数量一次性发送,这些参数可以自己设置);

        2.所有的生产者、消费者都要跟Broker建立连接,才能实现消息的收发;

        3.消息就是传输的数据(record),消息传输过程中都要序列化,代码中有相关序列化的工具。

3.2.1Kafka相关参数

        Kafka的相关参数可以去官网进行获取(https://kafka.apache.org/documentation/#api)

1.linger.ms(批量发送的等待时间)

2.max.poll.records(消费者消费数据的能力)

3.3. Topic

3.3.1相关介绍 

  1. Topic是逻辑上的一个队列,跟Rabbitmq的exchange中的Topic交换机类型不是一回事,为一组消息的集合,这个消息可能是不同的业务用途,然后起了个名字;

  2. 生产环境建议一个生产者对应一个Topic,一个消费者对应一个Topic(多对多的关系);

  3. 一个Topic对应多个Partition;

  4. 如果Topic不存在,Kafka会自动创建这个Topic。

         4.1Kafka有个参数allow auto create topics,可以设置Topic的创建权限,生产环境不建议打开这个参数,创建最好还是要申请,这个参数最好设为false。

3.3.2问题

 Topic中的消息很多很多,会带来如下问题:

        1.不利于横向扩展(如果需要继续进行横向扩展,则需要把消息分布在集群环境不同的机器上,而不是通过升级硬件,因为硬件厂商生产的硬件是有瓶颈的,比如戴尔的ssd硬盘最大为16T);

        2.并发或者负载的时候,性能会下降(可以通过分片的思想,把消息拆分成多份,kafka里面引入了Partition的概念)。

3.3.Partition

1. 把一个topic中的数据拆分成多份(partition:分片思想,可以设置一个或者多个);

2.Partition里面的数据被消费之后不会删除(里面的消息是追加的,属于增量数据,所以这就是Kafka吞吐量比较大的原因);

3.一个partition对应多个segment;

        kafka-topics.sh --create --topic mytopic --bootstrap-server 192.168.40.100:9092 --replication-factor 1 --partitions 2

        通过以上命令创建topic时,可以指定patition分区数量,同时可以通过--replication-factor xx创建副本因子(xx不能大于集群的节点数,取值0~集群节点数,存在集群中不同的机器上)。

3.3.1副本机制

  1. 红色的代表的是leader,灰色代表的是副本(follower),follower数据是从leader同步过来的。同一个Topic,它的leader不一定在同一个节点上。

  2. 为了达到负载均衡的目的,Partition不一定在同一个节点上。

  3. kafka的数据全部存在.log文件里面。

 3.3.2Segment

        log文件页很大的话,检索的效率就会很低,Kafka会对Partition再做一个拆分,引入Segment(段)的概念。

        以上是三个segment示例,是对Partition的一个分段,每个Segment都会有.index(索引)、.log(数据)、.timeindex(时间戳)三个文件。

        

 3.4消费者(消费者组)

1.如果消息有积压,可以通过增加消费者的数量来消费,Kafka通过引入消费者组的概念,来确定消费的是哪个Topic的数据。

2.消费者组也是一个逻辑概念。

3.消费者组的设计是为了保证消费的顺序。

通过如下参数指定:

注意: 在同一个消费者组中的消费者不能消费相同的partition

1.如果一个消费者组中的消费者比Partition多,那么多出来的消费者肯定消费不到partition,此时可以通过如下两种方法去解决:

        1.1可以把多出来的消费者分到其它消费者组中;

        1.2可以增加Partition来给消费者消费。

2.如果一个消费者组中的消费者比Partition少,那么一个消费者可以消费多个Partition;

3.同一个Partition可以被其它消费者组中的不同消费者消费。

3.4.1Consumer Offset

 

        之前,Kafka消费者的偏移量是记录在zk中的,现在Kafka引入了默认的50个消费者偏移量文件分段标识,用于记录消费者的偏移量,这个分段标识数量可以根据消费者的数量进行调整。  

4.Kafka java开发API介绍

4.1.ProducerAPI

发送消息的API

4.2.ConsumerAPI

接收消息的API

4.3.Admin API

管理、监测API

4.4.Stream API

处理大数据的API(Spark、Flink等)

4.5.Connect API

用于持续的从原系统输入数据的、或者从kafka推从数据到系统(比如数据库等)

4.6.Springboot连接Kafka

4.7数据多写的场景

假如mysql变动,又要同步更新es,此时怎么做呢?

        通过canal特性把数据实时同步到kafka、es、mysql这些中间件里面,这样可以完成数据流的操作,后续可以用来做数据的恢复、数据库日志的分析等等(Canal把自己伪装成一个slave节点,不断的去请求最新的binlog日志(记录了所有数据库的操作轨迹))。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

『航班乘客满意度』场景数据分析建模与业务归因解释 ⛵

💡 作者:韩信子ShowMeAI 📘 数据分析实战系列:https://www.showmeai.tech/tutorials/40 📘 机器学习实战系列:https://www.showmeai.tech/tutorials/41 📘 本文地址:https://www.sho…

vue+elementUI实现级联表格el-table级联多选

vueelementUI实现级联表格el-table级联多选 <template><div id"app"><el-button type"primary" click"getAllSelect()">获取选中集合</el-button><el-table:data"renderDynamic"ref"lendontable"…

DataFun: 微信NLP算法微服务治理

管理问题 性能问题 PyInter&#xff1a;暂未开源&#xff0c;有开源打算 调度问题 P50&#xff1a; 响应的中位数P999&#xff1a;耗时最慢的千分之一 让p999下降为p50的1.5倍

DIY正则图片下载工具

一、初心&#xff1a;如果您擅长正则表达式&#xff0c;可以自定义抓取自定义网页的图片。 二、效果&#xff1a; 目前支持 <img>标签抓取图片正则。更多正则欢迎分项。支持base64图片预览。 三、使用方法&#xff1a; 修改正则表达式&#xff1a;选中即可。同时工具几…

Springboot毕业设计毕设作品,纯净水销售配送管理系统设计与实现

功能清单 在系统里面我们将纯净水的产品统称为商品 【后台管理员功能】 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信息&#xff0c;支持删除 资讯分类&#…

基于Abaqus-Simpack联合仿真车辆-浮置板轨道耦合动力学仿真

作者&#xff1a; CAE兮枫如秋 仿真秀专栏作者 一、城市轨道交通中钢弹簧浮置板高级减振轨道 城市轨道交通不仅作为城市亮丽的名片&#xff0c;还在解决城市交通问题中具有特殊的地位和作用。城市轨道交通也是一种安全、快捷、准时、方便、舒适的理想交通工具。伴随着全世界各…

【MM小贴士】SAP创建成本中心采购订单带出默认会计科目和成本中心

在实施SAP项目梳理MM模块业务需求的时候&#xff0c;很多公司都会有这样需求&#xff0c;就是在创建成本中心采购订单的时候&#xff0c;因为成本中心和会计科目是必须输的&#xff0c;所以用户希望系统能够自动带出默认的会计科目和成本中心&#xff08;如下图&#xff09;。 …

14.前端笔记-CSS-浮动

1、传统网页布局的三种方式 网页布局的本质&#xff1a;用CSS摆放盒子 传统布局方式&#xff1a; - 普通流&#xff08;标准流&#xff09;- 浮动- 定位1.1 普通流&#xff08;文档流/标准流&#xff09; 就是标签按照规定好默认方式排列 &#xff08;1&#xff09;块级元素独…

项目前的知识回顾

杂谈 什么是框架 应用方面&#xff1a;框架是整个或者部分系统的可重用设计 目的方面&#xff1a;框架是可被开发者定制的应用骨架 统一的舞台&#xff0c;不同人表演不同的节目 框架解决什么问题 框架主要解决技术整合的问题 MYBATIS 什么是Mybatis Mybatis是一款半自动…

Ubuntu20.4安装QT6

前言&#xff1a; 本教程基于Ubuntu20.4&#xff0c;在Ubuntu22.4上也测试过。Ubuntu18.04由于GCC版本太低&#xff0c;无法正常工作。 1.下载QT安装程序&#xff1a; Open Source Development | Open Source License | Qt 2.安装libxcb-xinerama(必须在执行QT安装程序前执行…

多智能体(机器人)任务分配问题求解AssignmentProblem

问题提出&#xff1a; N个智能体&#xff0c;现在有个任务&#xff0c;就是让N个智能体要到N个目标位置&#xff0c;目标位置不能重复&#xff0c;目标位置与机器人一一对应&#xff0c;要使得期间所有所走的距离之和最短&#xff0c;求解最优任务分配。 问题抽象&#xff1a; …

关联分析——apprior算法

1.txt文件的打开与关闭 2.list的操作 3.字典的创建及保存 4.txt文件的创建与写入 输入&#xff1a; 结果&#xff1a; import os#input min_sup4 max_item[] data [] transaction[]curent_transaction,current_sup[],[] result_transaction,result_sup[],[]#Storage resul…

线索二叉树操作详解(详细图例+cpp实现+源码)

文章目录线索二叉树中序线索二叉树构造线索二叉树节点的线索化其他操作销毁二叉搜索树获取中序遍历的第一个节点获取中序遍历的最后一个节点输出中序遍历序列逆序输出中序遍历序列源码线索二叉树 线索二叉树又称为二叉树的线索化。 在一个具有n个节点的二叉树中&#xff0c;它…

Linux零基础入门(一)初识Linux

Linux零基础入门&#xff08;一&#xff09;初识Linux前言操作系统概述一 操作系统概述1 硬件和软件2 操作系统二 初识Linux1 Linux的诞生2 Linux内核3 Linux发行版三 虚拟机介绍1 虚拟机四 VMware WorkStation安装1 虚拟化软件五 在VMware上安装Linux1 下载CentOS操作系统六 远…

[附源码]计算机毕业设计springboot体育馆场地预约管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SwiftUI 如何快速识别视图(View)界面的刷新是由哪个状态的改变导致的?

功能需求 在 SwiftUI 中,我们视图的界面可能在不经意间被意外刷新了。这时,我们希望知道是该视图中的哪个状态导致了刷新。在包含众多状态的复杂视图中,这往往很难实现。 如上图所示,当我们随机改变视图中的状态时,可以在调试控制台中轻松看到是哪个状态导致了视图的刷新…

什么样的跨网数据摆渡系统,能够减少数据泄密的风险?

企业在公司正常运行下难免会产生一些重要数据或者敏感数据&#xff0c;这些都是企业在发展过程中积累下来的重要数据资产&#xff0c;对企业的发展至关重要。这些数据资产往往关联着企业的核心数据&#xff0c;一旦面临泄露&#xff0c;不仅仅会影响企业发展&#xff0c;甚至会…

词法分析(编译原理不用慌)

目录 一.简单版 二.简单版&#xff08;文本保存&#xff09; c版 运行结果&#xff1a; Java版 运行结果&#xff1a; 三.第三版&#xff08;文本保存&#xff09; c版 运行结果&#xff1a; 一.简单版 #include<stdio.h> #include<iostream> using namesp…

独立站SaaS系统站群模式怎么玩

做独立站的人都知道“站群”这个游戏&#xff0c;意思是通过建站工具一次性建好几百个或者几千个独立站。各个独立站卖的品类比较垂直&#xff0c;不会有太多SKU。销量好的站会留着精细化运营&#xff0c;没流量的就放弃。 使用脸书或谷歌和其他广告渠道来测试产品。每个产品…

Unity3d bounds包围盒 和collider碰撞器区别

Bounds 外包围盒 Bounds 叫作外包围盒、边界框、外扩矩形.是struct 结构体。而我们获得Bounds的主要途径有三种&#xff1a;Render,Collider,Mesh。 Render.bounds 世界坐标 Collider.bounds 世界坐标 Mesh.bounds 本地坐标 var m GetComponent<MeshFilter>().bound…