当前位置: 首页 > news >正文

一、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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Cursor免费 GPT-4 IDE 工具的保姆级使用教程
  • windows GetUserNameEx api使用c++
  • 【C#生态园】C#任务调度库大比拼:选择最适合你项目的工具
  • Hive 的窗口函数 详解
  • C# 继承父类,base指定构造函数
  • 钢管加工长度检测系统源码分享
  • 【LinuxC高级】汇总
  • 《独孤九剑》游戏源码(客户端+服务端+数据库+游戏全套源码)大小2.38G
  • rabbitmq 短信验证码
  • 控制器、运算器、存储器、I/O设备详解
  • c++常用工具类函数
  • 【sgCreateCallAPIFunctionParam】自定义小工具:敏捷开发→调用接口方法参数生成工具
  • Score-based Generative Models
  • 前端接口报错302 [已解决]
  • 多米诺骨牌游戏
  • 【RocksDB】TransactionDB源码分析
  • Android单元测试 - 几个重要问题
  • Angular4 模板式表单用法以及验证
  • C学习-枚举(九)
  • js
  • PHP 7 修改了什么呢 -- 2
  • uni-app项目数字滚动
  • 安卓应用性能调试和优化经验分享
  • 从零开始在ubuntu上搭建node开发环境
  • 从伪并行的 Python 多线程说起
  • 对象管理器(defineProperty)学习笔记
  • 高程读书笔记 第六章 面向对象程序设计
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 基于Android乐音识别(2)
  • 技术胖1-4季视频复习— (看视频笔记)
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 前端设计模式
  • 深入浏览器事件循环的本质
  • 双管齐下,VMware的容器新战略
  • 为视图添加丝滑的水波纹
  • 移动端唤起键盘时取消position:fixed定位
  • ​水经微图Web1.5.0版即将上线
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # centos7下FFmpeg环境部署记录
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #QT项目实战(天气预报)
  • (+4)2.2UML建模图
  • (4)(4.6) Triducer
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (二) 初入MySQL 【数据库管理】
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (一)Java算法:二分查找
  • (转)http协议
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET CORE Aws S3 使用