一、Kafka入门

一、消息中间件

1、为什么使用消息中间件?

异步
解耦
削峰填谷

2、异步

3、解耦

异步处理使整个数据操作流程解耦,如果短信服务或者积分服务异常,不影响前面重要的功能。

面试问题点:

所以尽量将不重要的服务放到下游,且不要产生依赖关系,如果下游服务产生耦合,那么这里的异步操作将失去意义。

4、削峰填谷

双十一秒杀、春节12306场景有流量洪峰,但是后端服务器短时间内无法处理大量请求,使用消息中间件可以缓存涌入进来的大量请求,后端服务慢慢消费这些请求,尽最大努力处理请求。

也不用为了这些“偶然”场景去搭建更高性能的服务集群,节约成本。

5、开发解耦

使用MQ可以避免直接调用接口。
如果B还未提供接口,A也不必等着

二、Kafka安装与配置

1、下载

Apache Kafka

2、解压

上传到Linux虚拟机,我这里使用的是阿里云服务器。

3、使用zookeeper启动

进入kafka的bin目录,编写两个启动脚本,一个启动zookeeper,一个启动kafka。

# 启动zookeeper脚本
#!/bin/bash
source /root/kafka/kafka_2.13-3.8.0/bin/zookeeper-server-start.sh /root/kafka/kafka_2.13-3.8.0/config/zookeeper.properties &# 启动kafka脚本
#!/bin/bash
source /root/kafka/kafka_2.13-3.8.0/bin/kafka-server-start.sh /root/kafka/kafka_2.13-3.8.0/config/server.properties &

4、直接启动

1)获取kafka唯一标识

# 获取kafka唯一标识
sh kafka-storage.sh random-uuid

使用uuid方式启动kafka后,可以看到返回一个uuid,这个uuid是kafka集群中节点的唯一标识。

2)格式化存储目录

 sh kafka-storage.sh format -t 25Z4D7QnRBKhQlw-VcDd8A -c ../config/kraft/server.properties

把相关的存储目录格式化,保存数据文件。

 3)启动kafka

sh kafka-server-start.sh ../config/kraft/server.properties

三、kafka的命令

1、topic - 主题

kafka-topics.sh

# 创建主题
sh kafka-topics.sh --bootstrap-server localhost:9092 --create --topic allwe-topic --replication-factor 1 --partitions 8# 查询主题
sh kafka-topics.sh --bootstrap-server localhost:9092 --list# 查询主题明细
sh kafka-topics.sh --bootstrap-server localhost:9092 --describe

2、生产者

kafka-console-producer.sh

# 启动生产者 - 指定一个主题
sh kafka-console-producer.sh --broker-list localhost:9092 --topic allwe-topic

3、消费者

kafka-console-consumer.sh

# 启动消费者 - 指定一个主题
sh kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic allwe-topic --from-beginning --consumer.config ../config/consumer.properties

四、kafka中的基本概念

1、主题和分区

主题:表示一类消息。

分区:认为是一个文件。可以理解为一个分区就是一个队列。

分区的意义:提高消费的并发程度。由于消费消息相对于生产消息很慢,可以增加分区去提高消费的并发度,从而平衡生产和消费的速度。

2、消息和批次

kafka内部只存储byte数组,消费者取消息时也只是取byte数组。

对于很大的数据,kafka会将这个大的数据分为多段小的数据,分批次发送。

3、生产者和消费者

生产者生产消息

消费者消费消息

4、偏移量、消费者群组

消费者根据偏移量确定上次消费到哪了,拿着偏移量继续消费。

当启动多个消费者时,可以组成一个消费者群组。

在群组消费者群组场景下,每个分区的消息只能由一个消费者消费,但是一个消费者可以消费多个分区的消息。这样做的目的是确保消息的顺序。

5、kafka中生产和消费流程

6、kafka硬件配置的选择

磁盘:非常依赖磁盘

        吞吐量:存储消息的速度。

        容量:堆积消息的能力,只有达到一定条件才会删除过时文件。

网络:比较依赖网络,网络的吞吐量对kafka集群的影响很大。

内存:影响消费速度,需要将数据从磁盘拿到内存中进行消费。建议单独部署。

CPU:依赖性不强

7、配置文件

server.properties

# 配置为正数。在集群场景下,如果出现网络ip变化,有了这个参数就不用担心
broker.id=0   # 配置kafka的端口号
listeners=PLAINTEXT://localhost:9092# 网络请求线程数
num.network.threads=3# 数据存储目录
log.dirs=/tmp/kafka-logs# 创建主题时,默认分区数
num.partitions=1# 在重启或启动时,加载数据的线程数,建议和cpu核数对应
num.recovery.threads.per.data.dir=1# 配置日志保存时间,默认是168小时,过期自动清理
log.retention.hours=168# 如果以zookeeper启动,指定zookeeper的ip+port
zookeeper.connect=localhost:2181

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

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

相关文章

闲盒支持的组网方式和注意事项

1. 直连光猫拨号​ 通过光猫拨号,设备直连光猫的设备,需要对光猫开启UPNP并关闭DMZ 如果只接一个盒子,建议直接针对盒子IP开dmz。 2. 直连路由器​ 通过路由器拨号,设备直连路由器的设备,需要对路由器开启UPNP并关闭…

Spring Security学习

系列文章目录 第一章 基础知识、数据类型学习 第二章 万年历项目 第三章 代码逻辑训练习题 第四章 方法、数组学习 第五章 图书管理系统项目 第六章 面向对象编程:封装、继承、多态学习 第七章 封装继承多态习题 第八章 常用类、包装类、异常处理机制学习 第九章 集…

如何防止U盘资料被复制?这六个策略你值得牢记!

随着U盘广泛应用于企业和个人数据存储,如何防止U盘资料被非法复制和泄露成为企业信息安全的重要问题。 U盘作为便携的数据存储设备,虽然方便,但也带来了数据泄露的风险。 为了有效防止U盘资料被复制,以下六个策略能够帮助企业和个…

1. go 环境

1. golang的编译与运行 1.1 编译go build 编译当前目当目录 go build 或 go build .编译指定文件或目录 #编译main文件,将会生成可指行文件 go build ./main.go #编译指定文件pl,不会产生编译文件,仅进行编译查检查 go build ./plmain包有多个文件的…

gradio交互式界面部署

gradio交互式界面部署 示例:http://xxxxx:1111/api/v1/my_model 为模型服务api,传入参数为: {"company": company,"name": name,"t_date": t_date,"amount": amount,"img1_path": img1_…

LeetCode Hot100 C++ 哈希 128.最长连续序列

128.最长连续序列 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续&#xff0…

怎么测试射频芯片质量的好坏?

无论是手机通信,还是卫星导航,射频芯片都是其核心组件之一。本文将探讨如何准确判断射频芯片的质量,以确保技术设备的稳定运行。 1. 外观检查 检查射频芯片是否有破损、引脚断裂、缺陷等。 2. 电气参数测试 对射频芯片的输入输出阻抗、功耗、…

RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)

♥️作者:小宋1021 🤵‍♂️个人主页:小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油&#xff01…

伊犁云计算22-1 rhel8 dhcp 配置

1 局域网搭建 2 yum 配置 这个参考前面 不说 3 dnf 安装dhcp 好我们废话不说开始安装。理论看书去 进入 dhcp.conf 配置 重启dhcpd 不能报错!!!! 我们在客户机上做测试 全局的dhcp关闭 很明显我们的客户机获取到192.16…

libreoffice word转pdf

一、准备一个word文件 运行: cd /root libreoffice --headless --convert-to pdf --outdir /root/output doc1.docx 发现中文乱码: 此时我们需要给linux 上添加中文字体: centos7 添加中文字体 再次运行正常: libreoffice --h…

如何使用Postman搞定带有token认证的接口实战!

现在许多项目都使用jwt来实现用户登录和数据权限,校验过用户的用户名和密码后,会向用户响应一段经过加密的token,在这段token中可能储存了数据权限等,在后期的访问中,需要携带这段token,后台解析这段token才…

基于SpringBoot社区疫情信息管理系统的设计和实现

文未可获取一份本项目的java源码和数据库参考。 选题的意义 保护好人民群众的基本安全,贯彻党的领导下中国一盘棋的基本准则。将病毒隔绝在外,信息系统的存在显得至关重要,应对新型冠状病毒肺炎疫情治理的实践背景。实时关注更新疫情动态&a…

支持K歌音箱方案应用的高性能 32 位蓝牙音频应用处理器-BP1048B2

DSP是一类嵌入式通用可编程微处理器,主要用于实现对信号的采集、识别、变换、增强、控制等算法处理,是各类嵌入式系统的“大脑”应用十分广泛。BP1048B2是一款高性能DSP音频数字信号处理器芯片,能实现多种音频功能如混响、均衡、滤波、反馈抑…

Vue 自定义指令实现权限控制

一. 引言 Vue.js 提供了一种简单、灵活的方式来创建交互式的用户界面。在 Vue.js 中,指令是一种特殊的属性,可以附加到 HTML 元素上以执行一些操作。我们可以使用自定义指令来实现各种功能,比如:权限控制、自动聚焦、拖动指令等等…

Java基础 — Java 虚拟机(上篇)

该文章属于Java进阶部分的JVM入门,本章讲述了JVM的历史、Java源代码到机器码的过程以及 Class字节码文件的内部结构等。 了解了这篇文章,能让你深入地了解JVM知识,保证在短时间内掌握JVM! JVM 入门教程(上篇&#xff0…

Android通知服务及相关概念

本文基于Android 14源码 1 NotificationManagerService的启动 1.1 添加服务 和其他系统服务一样,NotificationManagerService也是在SystemServer中启动的。 //framework/base/services/java/com/android/server/SystemServer.java private void run() {t.traceB…

无人机在隧道中如何实现在无卫星信号下的自主导航

无人机在隧道中实现无卫星信号下的自主导航,主要依赖于多种高精尖传感器和先进算法的协同工作。以下是具体的实现方式: 一、传感器技术 惯性导航系统(INS): 惯性导航系统通过测量无人机的加速度和角速度&#xff0c…

QT中各数据基础类型互转方式有哪些?

在Qt中,各数据基础类型之间的互转是一个常见的需求,以便在程序的不同部分合理地存储、调用和显示数据。以下是一些常见的Qt数据基础类型互转方式: 1. 数值类型与QString的互转 数值类型转QString 使用QString::number()函数。这个函数可以将…

通过docker启动ElasticSearch后为ElasticSearch设置用户和密码

文章目录 0. 前言1. 没有设置用户名和密码的情况2. 为ElasticSearch设置用户名和密码2.1 进入 ElasticSearch 容器内部2.2 修改 ElasticSearch 的配置文件2.3 设置用户名和密码 3. 在 kibana 容器中指定访问 ElasticSearch 的用户名和密码4. 设置用户名和密码后的情况4.1 访问 …

高级java每日一道面试题-2024年9月18日-设计模式篇-JDK动态代理,CGLIB代理,AspectJ区别?

如果有遗漏,评论区告诉我进行补充 面试官: JDK动态代理,CGLIB代理,AspectJ区别? 我回答: 在Java开发中,代理(Proxy)是一种常用的设计模式,它允许开发者在不修改原有类代码的情况下,通过代理类来控制对原有类的访问…