Kafka学习笔记01【2024最新版】

一、Kafka-课程介绍

官网地址:Apache KafkaApache Kafka: A Distributed Streaming Platform.icon-default.png?t=N7T8https://kafka.apache.org/

kafka 3.6.1版本,作为经典分布式订阅、发布的消息传输中间件,kafka在实时数据处理、消息队列、流处理等领域具有广泛的应用场景。高性能、高可靠、高吞吐,被数千家公司应用于高性能的数据管道、流分析和数据集成等不同场景,在海量实时数据传输和事件驱动的微服务架构中也被广泛地使用。

学习步骤:

1、kafka集群启动

2、主题创建

3、生产消息

4、存储消息

5、消费消息

大数据场景中,我们将kafka和Flume、Spark和Flink等软件进行集成,那么kafka依然用作数据传输的消息中间件,那Flume就作为producer生产者来生产数据,而我们的Spark和Flink分布式计算引擎就作为consumer消费者来消费数据

三、Kafka-软件介绍

为什么分布式系统之间它需要使用一个软件来完成数据交换的这个过程?那说到我们数据交换啊,在java开发的这个普通场景中,主要指的就是线程和线程之间的数据交换以及呢进程和进程之间的数据交换。我们线程和线程之间是如何做数据交换的,其实呢我们主要是用内存来完成这个操作的。

首先我们的java虚拟机当中,每个线程呢其实是有它独立的这个栈内存空间的,每个线程是独立的,那么这两个我们的线程它们是如何交互的呢?首先它们两块内存是独立的,不过呢java虚拟机还有一块内存是它们共享的,这块内存呢我们称之为堆内存,咱们这个堆内存呢,其实就是我们所有线程共享的,那既然是所有线程共享的,那么是不是就可以将线程的数据发送到这块内存当中呢?这个肯定是没有问题的,那我们另外一个线程啊,其实就可以想办法呢,从这个堆内存当中把数据给我获取过来,因为你是共享的吗?你共享的话,你的数据放进去,我这边应该是可以获取到的,这个应该是没有问题的,那么为了数据的操作方便,java还提供了专门的数据模型Q来作为数据的缓冲区进行数据的传输,就是我们通过一种队列的方式来完成,比较常见的呢就是阻塞队列啊BlockingQueue或者那个双端队列DQ啊等等。其实我们通过内存就可以实现我们数据的传输了,那么根本也不需要额外的第三方软件来完成。(缺点会导致内存不够用了,内存溢出)

接下来再说说进程和进程之间的数据交互,我们在执行java程序的时候,就会启动一个java虚拟机的进程,那这个时候呢如果你想启用第二个进程的话,那它们两个能不能共享内存来完成我们的数据交互呢?其实是不行的,为什么呢?因为我们的java虚拟机啊,它在启动的时候会向操作系统申请内存,意味着两个不同的进程它们申请的内存其实是不一样的,那也就是说每个进程的内存空间是独立的,它们无法共享,因此我们进程之间传递数据呢都是采用网络数据流来进行传输的,比如我们使用java提供的基础的socket、ServerSocket这样的接口来实现网络的数据传输(数据需要重复发送)

缓冲区【消息中间件】

四、Kafka-JMS介绍

Java Message Service【JMS】

P2P模型

PS模型

五、Kafka-组件

六、Kafka-安装与启动

windows安装步骤:

1、解压 kafka_2.12-3.7.0.tgz

2、kafka_2.12-3.7.0目录下新建data目录

3、修改config目录下的zookeeper.properties

dataDir=D:/xxx/kafka_2.12-3.7.0/data/zk

4、在kafka_2.12-3.7.0目录下新建zk.cmd文件

call bin/windows/zookeeper-server-start.bat config/zookeeper.properties

5、双击zk.cmd,启动zookeeper

6、修改config目录下的server.properties

log.dirs=D:/gitee/kafka_2.12-3.7.0/data/kafka

7、在kafka_2.12-3.7.0目录下新建kfk.cmd文件

call bin/windows/kafka-server-start.bat config/server.properties

8、双击kfk.cmd,启动kafka

十三、Kafka-基础架构图形推演

数据只保存在内存中是不安全的,我们需要把数据保存到日志文件中。为什么是日志文件呢?就是因为kafka早期就是做日志数据传输的,所以它的文件就叫做.log

架构

kafka采用生产者消费者的模型,所以它是允许多个生产者来生产数据,同时呢它也允许多个消费者来消费数据

有没有发现什么问题?我们当前的这个Kafka Broker 有很多的生产者和消费者对它进行访问,这个频繁的数据请求访问呢?大概率就会因为吞吐量过大产生IO热点问题,从而导致这个单一的这个节点成为整个分布式系统的性能瓶颈,进行就会降低系统的可用性和稳定性,一旦我们当前的Broker它宕掉了,那我们的数据其实就无法访问了,你连服务都没有了,怎么可能访问数据呢?

横向扩展:增加服务节点,搭建服务器集群,降低单点故障带来的风险(增加多个Broker节点,把Topic划分为多个数据块【添加编号进行区分】,放在多个Broker节点,消费者添加消费者组)

纵向扩展:增加系统的资源配置,比如使用IO效率更好的固态硬盘以及更大的内存、更多的CPU核,还有更快的网络(其实无法从根本上解决问题的,咱们的资源是有限的,一旦单机的吞吐量超过阈值,无论你增加什么样的资源都是无法解决问题的)

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

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

相关文章

容器安全-镜像扫描

前言 容器镜像安全是云原生应用交付安全的重要一环,对上传的容器镜像进行及时安全扫描,并基于扫描结果选择阻断应用部署,可有效降低生产环境漏洞风险。容器安全面临的风险有:镜像风险、镜像仓库风险、编排工具风险,小…

Python_AI库 Matplotlib的应用简例:绘制与保存折线图

本文默认读者已具备以下技能: 熟悉Python基础语法,以自行阅读python代码块熟悉Vscode或其它编辑工具的应用 在数据可视化领域,Matplotlib无疑是一个强大的工具。它允许我们创建各种静态、动态、交互式的可视化图形,帮助我们更好…

python中如何用matplotlib写雷达图

#代码 import numpy as np # import matplotlib as plt # from matplotlib import pyplot as plt import matplotlib.pyplot as pltplt.rcParams[font.sans-serif].insert(0, SimHei) plt.rcParams[axes.unicode_minus] Falselabels np.array([速度, 力量, 经验, 防守, 发球…

新科技辅助器具赋能视障生活:让盲人出行融入日常

随着科技日新月异的发展,一款名为蝙蝠避障专为改善盲人日常生活的盲人日常生活辅助器具应运而生,它通过巧妙整合实时避障与拍照识别功能,成功改变了盲人朋友们的生活格局,为他们提供了更为便捷、高效的生活体验。 这款非同…

注意力机制:SENet详解

SENet(Squeeze-and-Excitation Networks)是2017年提出的一种经典的通道注意力机制,这种注意力可以让网络更加专注于一些重要的featuremap,它通过对特征通道间的相关性进行建模,把重要的特征图进行强化来提升模型的性能…

【Redis 开发】Redisson

Redisson RedissonRedisson分布式锁Redisson可重入锁Redission解决超时释放的问题Redission解决锁的判断一次性问题Redission分布式锁主从一致性问题 Redisson Redisson是一个在Redis的基础上实现的java驻内存数据网格,就是提供了一系列的分布式的java对象 官方地址…

分布式与一致性协议之Paxos算法(二)

Paxos算法 如何达成共识 想象这样一个场景,某地出现突发事件,当地村委会、负责人等在积极研究和搜集解决该事件的解决方案,你也决定参与其中,提交提案,建议一些解决方法。为了和其他村民的提案做区分,你的…

以太网LAN双向透明传输CH9120透传芯片实现以太网转232串口转485转TTL串口

网络串口透传芯片 CH9120 1、概述 CH9120 是一款网络串口透传芯片。CH9120 内部集成 TCP/IP 协议栈,可实现网络数据包和串口数据的双向透明传输,具有 TCP CLIENT、TCP SERVER、UDP CLIENT 、UDP SERVER 4 种工作模式,串口波特率最高可支持到…

BUUCTF-WEB2

[SUCTF 2019]EasySQL1 1.启动靶机 2.寻找注入点和注入方法 随便输入一个字母,没有回显 随便输入一个数字,发现有回显,并且回显结果一样 3.堆叠注入 1; show databases; #查看数据库 1; show tables; #查看数据表 里面有个flag 1;set …

图像处理ASIC设计方法 笔记19 连通域标记ASIC系统设计

目录 核心的模块有:标记ASIC的工作流程如下:该芯片的系统结构具有如下特点:P131 第6章 连通域标记与轮廓跟踪 本章节讲述了多值分割图像连通域标记芯片的系统设计 多值分割图像连通域标记芯片(以下简称"标记芯片",也称"标记 ASIC"),完成图像连通域标…

ffmpeg中stream_loop参数不生效原因分析

问题 使用ffmpeg把一个视频文件发布成一个rtmp流,并设置成循环推流,此时需要使用参数stream_loop,命令如下: ffmpeg.exe -stream_loop -1 -re -i D:\tools\ffmpeg-5.1.2\bin\sei.h264 -c copy -f flv -safe 0 rtmp://localhost:1935/live/te…

视频号小店要交多少保证金?这里面的秘密,全网无人敢说!

大家好,我是电商糖果 关于视频号小店的保证金的问题,有不少人询问过糖果。 这毕竟是个新平台,很多人对于它的收费标准不太清楚。 糖果做视频号小店一年多了,也开了多家小店。 下面就来给大家详细的说一下。 首先,我…

鸿蒙官网学习3

鸿蒙官网学习3 每日小提示项目的模块类型跨设备预览调试阶段应用的替换方式有两种 打开老的demo工程报错UIAbility 每日小提示 项目的模块类型 moduleType分为三种,只有1,2的模块支持直接调试和运行 entryfeaturehar 跨设备预览 需要手动在config.j…

Java微服务架构之Spring Boot —上篇

SpringBoot 概述 SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的效率,一定程度…

Swift - 基础语法

文章目录 Swift - 基础语法1. 常量1.1 只能赋值1次1.2 它的值不要求在编译时期确定,但使用之前必须赋值1次1.3 常量、变量在初始化之前,都不能使用 2. 标识符3. 常用数据类型4. 字面量4.1 布尔4.2 字符串4.3 整数4.4 浮点数4.5 数组4.6 字典 5. 类型转换…

【MySQL关系型数据库】基本命令、配置、连接池

目录 MySQL数据库 第一章 1、什么是数据库 2、数据库分类 3、不同数据库的特点 4、MySQL常见命令: 5、MySQL基本语法 第二章 1、MySQL的常见数据类型 1、数值类型 2、字符类型 3、时间日期类型 2、SQL语句分类 1、DDL(数据定义语言&#x…

Qt设置可执行程序图标,并打包发布

一、设置图标 图标png转ico: https://www.toolhelper.cn/Image/ImageToIco设置可执行程序图标 修改可执行程序图标 添加一个rc文件,操作如下,记得后缀改为rc 打开logo.rc文件添加代码IDI_ICON1 ICON DISCARDABLE "logo.ico"在项目pro后缀名的文件中添加代码 RC_…

一套Java语言开发的(药物不良反应智能监测ADR成品源码)B/S架构:用于监测和收集药品在使用过程中发生的不良反应的系统

药品不良反应监测工作弥补了药品上市前研究的局限性,可以最大程度上降低药品不良反应的重复发生,提高合理用药水平,同时也为监管、遴选、调整基本药物提供了数据支持。 所谓“是药三分毒”,药品是把双刃剑,具有两面性…

基于springboot+vue+Mysql的CSGO赛事管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

Docker容器部署overleaf

overleaf在线版限制很多,好在开源,准备在本地Docker部署,网上翻了翻,似乎本地部署并非易事,我也尝试了一下,发现直接使用docker-compose拉官方最新镜像部署的确问题很多,不过最终还是完美解决。…