Kafka学习笔记1(千峰教育)

Kafka学习笔记1(千峰教育)

  • 一、为什么使用消息队列
    • 1.使用同步的通信方式来解决多个服务之间的通信
    • 2.使用异步的通信方式
  • 二、消息队列的流派
    • 1.有broker
    • 2.无broker
  • 三、Kafka的基本知识
    • 1.Kafk2a的安装
    • 2.Kafka中的一些基本概念
    • 3.创建topic
    • 4.发送消息
    • 5.消费消息
    • 6.关于消息的细节
    • 7.单播消息
    • 8.多播消息
    • 9.查看消费组的详细信息
  • 四、Kafka中主题和分区的概念
    • 1.主题Topic
    • 2.分区Partition
      • 1)分区的概念
      • 2)创建多分区的主题
    • 3.kafka中消息日志文件中保存的内容
  • 五、Kafka集群操作
    • 1.搭建kafka集群(三个broker)
    • 2.副本的概念
    • 3.关于集群消费
      • 1)向集群发送消息
      • 2)从集群消费消息
      • 3)指定消费组来消费消息
      • 4)分区分消费组的集群消费中的细节

一、为什么使用消息队列

1.使用同步的通信方式来解决多个服务之间的通信

在这里插入图片描述

同步的通信方式会存在性能和稳定性的问题。

2.使用异步的通信方式

在这里插入图片描述

针对于同步的通信方式来说,异步的方式,可以让上游快速成功,极大提高了系统的吞吐量。而且在分布式系统中,通过下游多个服务的分布式事务的保障,也能保障业务执行之后的最终一致性。

消息队列解决具体的是什么问题——通信问题。

二、消息队列的流派

目前消息队列的中间件选型有很多种:

  • rabbitMQ:内部的可玩性(功能性)是非常强的
  • rocketMQ:阿里内部一个大神,根据kafka的内部执行原理,手写的一个消息队列中间件。性能是与kafka比肩,除此之外,在功能上封装了更多的功能。
  • kafka:全球消息处理性能最快的一款MQ
  • zeroMQ

这些消息队列中间件有什么区别?

1.有broker

  • 重topic:kafka、RocketMQ、ActiveMQ

    整个broker,依据topic来进行消息的中转。在重topic的消息队列里必然需要topic的存在。

  • 轻topic:RabbitMQ

    topic只是一种中转模式。

2.无broker

在生产者和消费者之间没有使用broker,例如zeroMQ,直接使用socket进行通信。

三、Kafka的基本知识

1.Kafk2a的安装

  • 部署一台zookeeper服务器

  • 安装jdk

  • 下载kafka的安装包:https://kafka.apache.org/downloads

  • 上传kafka到服务器上:/user/local/kafka

  • 解压缩压缩包

  • 进入到config目录内,修改server.properties

    #broker.id属性在kafka集群中必须是要唯一
    broker.id=0
    #kafka部署的机器ip和提供服务的端口号
    listeners=PLAINTEXT://服务器IP:9092
    #kafka的消息存储文件
    log.dir=/usr/local/data/kafka-logs
    #kafka连接zookeeper的地址
    zookeeper.connect=服务器IP:2181
    
  • 进入到bin目录内,执行以下命令来启动kafka服务器(带着配置文件)

    ./kafka-server-start.sh -daemon ../config/server.properties
    
  • 校验kafka是否启动成功:

    进入到zk内查看是否有kafka的节点:brokers/ids/0

2.Kafka中的一些基本概念

kafka中有这么些复杂的概念

在这里插入图片描述

名称解释
Broker消息中间件处理节点,一个Kafka节点就是一个broker,一个或多个Broker可以组成一个Kafka集群
TopicKafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic
Producer消息生产者:向Broker发送消息的客户端
Consumer消息消费者:从Broker读取消息的客户端

3.创建topic

  • 通过kafka命令向zk中创建一个主题

    ./kafka-topics.sh --create --zookeeper ip:2181 --replication-factor 1 --partitions 1 --topic test
    
  • 查看当前zk中所有的主题

    ./kafka-topics.sh --list --zookeeper ip:2181
    test
    

4.发送消息

把消息发送给broker中的某个topic,打开一个kafka发送消息的客户端,然后开始用客户端向kafka服务器发送消息

./kafka-console-producer.sh --broker-list ip:9092 --topic test

5.消费消息

打开一个消费消息的客户端,向kafka服务器的某个主题消费信息

  • 方式一:从当前主题中的最后一条消息的offset(偏移量位置)+1开始消费

    ./kafka-console-consumer.sh --bootstrap-server ip:9092 --topic test
    
  • 方式二:从当前主题中的第一条消息开始消费

    ./kafka-console-consumer.sh --bootstrap-server ip:9092 --from-beginning --topic test
    

6.关于消息的细节

在这里插入图片描述

  • 生产者将消息发送给broker,broker会将消息保存在本地的日志文件中

    /usr/local/kafka/data/kafka-logs/主题-分区/000000000.log
    
  • 消息的保存是有效的,通过offset偏移量来描述消息的有序性

  • 消费者消费信息时也是通过offset来描述当前要消费的那条消息的位置

7.单播消息

在一个kafka的topic中,启动两个消费者,一个生产者。问:生产者发送消息,这条消息是否同时会被两个消费者消费?

如果多个消费者在同一个消费组,那么只有一个消费者可以收到订阅的topic中的消息。换言之,同一个消费组中只能有一个消费者收到一个topic中的消息。

./kafka-console-consumer.sh --bootstrap-server ip:9092 --consumer-property gropu.id=testGroup --topic test

8.多播消息

不同的消费组订阅同一个topic,那么不同的消费组中只有一个消费者能收到消息。实际上也是多个消费组中的多个消费者收到了同一个消息。

#消费组testGroup1
./kafka-console-consumer.sh --bootstrap-server ip:9092 --consumer-property gropu.id=testGroup1 --topic test
#消费组testGroup2
./kafka-console-consumer.sh --bootstrap-server ip:9092 --consumer-property gropu.id=testGroup2 --topic test

在这里插入图片描述

9.查看消费组的详细信息

通过以下命令可以查看到消费组的详细信息:

./kafka-consumer-groups.sh --bootstrap-server ip:9092 --describe --group testGroup

重点关注以下几个信息:

  • Currennt-offset:当前消费组的已消费偏移量
  • Log-end-offset:主题对应分区消息的结束偏移量(HW)
  • Lag:当前消费组未消费的消息数

四、Kafka中主题和分区的概念

1.主题Topic

主题-topic在kafka中是一个逻辑的概念,kafka通过topic将消息进行分类。不同的topic会被订阅该topic的消费者消费。

但是有一个问题,如果说这个topic中的消息非常非常多,多到需要几T来存,因为消息是会保存到log日志文件中的。为了解决这个文件过大的问题,kafka提出了Partition分区的概念。

2.分区Partition

1)分区的概念

通过partition将一个topic中的消息来存储。这样的好处有多个:

  • 分区存储,可以解决统一存储文件过大的问题。

  • 提供了读写的吞吐量,读和写可以同时在多个分区中进行。

    在这里插入图片描述

2)创建多分区的主题

./kafka-topics.sh --create --zookeeper ip:2181 --replication-factor 1 --partitions 2 --topic test1

3.kafka中消息日志文件中保存的内容

  • 00000.log:这个文件中保存的就是消息。

  • _consumer_offsets-49

    kafka内部自己创建了_consumer_offset主题包含了50个分区。这个主题用来存放消费者消费某个主题的偏移量,因为每个消费者都会自己维护消费的主题的偏移量,也就是说每个消费者会把消费的主题的偏移量自主上报给kafka中的默认主题:consumer_offsets。因为kafka为了提升这个主题的并发性,默认设置了50个分区。

    • 提交到哪个分区:通过hash函数确定:hash(consumerGroupId)%_consumer_offsets主题的分区数。
    • 提交到该主题中的内容是:key是consumerGroupId+topic+分区号,value就说当前offset的值。
  • 文件中保存的消息,默认保存7天,7天到后消息会被删除。

五、Kafka集群操作

1.搭建kafka集群(三个broker)

  • 创建三个server.properties文件

    # 0 1 2
    broker.id=2
    # 9092 9093 9094
    listeners=PLAINTEXT://192.168.65.60:9004
    # kafka-logs kafka-logs-1 kafka-logs-2
    log.dir=/usr/local/data/kafka-logs-2
    
  • 通过命令来启动三台broker

    ./kafka-server-start.sh -daemon ../config/server.properties
    ./kafka-server-start.sh -daemon ../config/server1.properties
    ./kafka-server-start.sh -daemon ../config/server2.properties
    
  • 校验是否启动成功

    进入到zk中查看/brokers/ids中是否有3个znode(0,1,2)

2.副本的概念

在创建主题时,除了指明主题的分区数外,还指明了副本数,那么副本是一个什么概念呢?

副本是为了给主题中的分区创建多个备份,多个副本在kafka集群的多个broker中,会有一个副本作为leader,其他是follower。

在这里插入图片描述

  • leader:kafka的写和读的操作都发生在leader上。leader负责把数据同步给follower。当leader挂了,经过主从 选举,从多个follower中选举产生一个新的leader。
  • follower:接受leader同步的数据。
  • isr:可以同步和已同步的节点会被存入到isr集合中。细节:如果isr中的节点性能比较差,会被踢出isr集合。

(重点~!)此时,broker、主题、分区、副本这些概念就全部展现了,大家需要把这些概念梳理清除:

集群中有多个broker,创建主题时可以指明主题有多个分区(把消息拆分到不同的分区中存储),可以为分区创建多个副本,不同的副本存放在不同的broker里。

3.关于集群消费

1)向集群发送消息

./kafka-console-producer.sh --broker-list ip1:9092,ip1:9093,ip1:9094 --topic my-replicated-topic

2)从集群消费消息

./kafka-console-consumer.sh --bootstrap-server ip1:9092,ip1:9093,ip1:9094 --from-beginning --topic my-replicated-topic

3)指定消费组来消费消息

./kafka-console-consumer.sh --bootstrap-server ip1:9092,ip1:9093,ip1:9094 --from-beginning --consumer-property group.id=testGroup1 --topic my-replicated-topic

4)分区分消费组的集群消费中的细节

在这里插入图片描述

  • 一个partition只能被一个消费组中的一个消费者消费,目的是为了保证消费的顺序性,但是多个partition的多个消费者消费的总的顺序性是得不到保证的,那怎么做到消费的总顺序性呢?
  • partition的数量决定了消费组中消费者的数量,建议同一个消费组中消费者的数量不要超过partition的数量,否则多个消费者没有消息消费。
  • 如果消费者挂了,那么会触发rebalance机制,会让其他消费者来消费该分区。

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

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

相关文章

sonarqube安装踩坑记录

如果用java1.8和mysql,则sonarqube版本不能超过7.8,看这里。 sonarqube7.8安装包地址: https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.8.zip 安装步骤: 1、下载sonarqube安装包 wget https://binari…

【PowerMockito:编写单元测试过程中采用when打桩失效的问题】

问题描述 正如上图所示,采用when打桩了,但是,实际执行的时候还是返回null。 解决方案 打桩时直接用any() 但是这样可能出现一个mybatisplus的异常,所以在测试类中需要加入以下代码片段: Beforepublic void setUp() …

软件测试/测试开发丨Pytest 参数化用例

参数化 通过参数的方式传递数据,从而实现数据和脚本分离。并且可以实现用例的重复生成与执行。 参数化应用场景 测试登录场景 测试登录成功,登录失败(账号错误,密码错误)创建多种账号: 中⽂文账号,英⽂文账号 普通测试用例方法 …

nginx 1.14.0引入自己使用C语言写的模块

参考的一篇博客《为NGINX编译第三方动态模块》 源码的地址:https://github.com/perusio/nginx-hello-world-module/tree/master。 源码被我放到系统中/root/nginx-hello-world-module目录下,ls /root/nginx-hello-world-module可以看一下源码里边的内容。…

C++初阶(十七)模板进阶

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、非类型模板参数二、模板的特化1、概念2、函数模板特化3、类模板特化1、全特化2、偏特化 三…

【tcp】TCP CLOSE_WAIT问题分析与定位

一、问题背景 某日,运维突然在群里突然丢出告警信息: 对象类型:主机 检测规则:NET.TCP.CLOSE.WAIT 告警内容:CLOSE_WAIT状态的TCP连接数大于500 ....image.png 上面告警信息已经说的很明白,CLOSE_WAIT状…

Ruff物联网数采网关助力工业企业数字化转型,降本增效

如今,随着工厂数字化转型进程的加速,越来越多的企业对于设备数据感知层及传输层的应用越来越重视,因此工业数采网关也走进了很多人的视野,在工厂数字化转型中扮演着关键角色。 物联网数据采集网关能将各种传感器、执行器等设备连…

主浏览器优化之路1——你现在在用的是什么浏览器?Edge?谷歌?火狐?360!?

上一世,我的浏览器之路 引言为什么要用两个浏览器为什么一定要放弃火狐结尾给大家一个猜数字小游戏(测运气) 引言 小时候,我一开始上网的浏览器是2345王牌浏览器吧, 因为上面集成了很多网站,我记得上面有7…

五轴机床测头:高精度曲面检测的得力工具

五轴机床测头广泛应用于制造业中的高精度加工领域。它能够准确、快速地检测出曲面的形状、尺寸和特征,为生产过程中的质量控制提供了重要支持。 五轴机床测头是一款具有3维5向探测功能的红外触发机床测头,广泛应用于 3 轴、5 轴加工中心,以及…

【Bootstrap学习 day1】

Bootstrap5 网格的基本结构 等宽响应式列 Bootstrap 5 网格系统有6个类: .col-针对所有设备 col-sm平板-屏幕宽度等于或大于576px。 .col-md-桌面显示器,屏幕宽度等于或大于768px col-lg大桌面显示器,屏幕宽度等于或大于992px col-xl特大桌面…

百度CTO王海峰:文心一言用户规模破1亿

▶ 写在前面▶ 飞桨开发者已达1070万▶ 文心一言用户规模破亿,日提问量快速增长 ▶ 写在前面 “文心一言用户规模突破 1 亿。”12 月 28日,百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰在第十届 WAVE SUMMIT 深度学习开发者大会上宣布…

事务的简介

一、什么是事务 事务是一组数据库的操作序列,包含一个或多个sql操作命令(增删改),事务将所有的操作命令看做一个不可分割的整体,向数据库系统提交或撤销操作,所有操作要么执行要么不执行。 ●事务是一种机…

大创项目推荐 深度学习YOLO安检管制物品识别与检测 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov55 模型训练6 实现效果7 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习YOLO安检管制误判识别与检测 ** 该项目较为新颖,适合作为竞赛课题方向&…

计算机毕业设计-----ssm流浪猫狗救助管理系统

项目介绍 流浪猫狗救助管理系统。该项目分为前后台; 前台主要功能包括:会员的注册登陆,流浪猫狗知识,领养中心,团队活动,流浪宠物详情,申请领养等; 后台主要功能包括:管理员的用户…

【SpringCloud笔记】(9)分布式配置中心之Config

Config 概述 分布式系统当前面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。 比如:有n个微服务连接同一套数据库,当连接数据库需要发生变动时&…

webrtc turn服务器搭建

测试环境ubuntu 22LTS 首先从github上下载源码编译 GitHub - coturn/coturn: coturn TURN server project 用的tag docker/4.6.2-r7 ./configure --prefix /usr/local/coturn make 安装coturn的时候还需要安装一些依赖包 apt-get install pkg-config apt-get install op…

室内设计师效果图云渲染好?还是本地渲染好?

室内设计师在设计项目中经常面临一个关键的技术选择:使用云渲染服务或本地渲染完成效果图渲染呢?每种方式都有其独的优势与不足,且影响整个设计的完成速度、质量和成本。当然还有部分人群不知道云渲染是什么?本文整理关于云渲染的…

为什么都建议配备人员摔倒AI检测算法

旭帆科技的AI智能分析网关v4包含有30多种算法,包括人体、车辆、行为分析、烟火、入侵、安全帽、反光衣等等,可应用在安全生产、通用园区、智慧社区、智慧工地等场景中。 今天,小编就其中的摔倒检测算法来展开聊聊,可以用于哪些场…

达梦dm.ini参数之SELECT_LOCK_MODE详解

一、背景 1.现象概述 某项目当晚分区表变更,因为manager工具多开了1个窗口执行了语句慢取消了,新开了一个会话窗口执行添加分区/删除分区/truncate分区卡死了,v$session查不到关于这张分区表的阻塞和事务,但是在v$lock里根据表的…

C语言-第十七周课堂总结-数组

找出矩阵中最大值所在的位置 程序解析-求矩阵的最大值 源程序段 二维数组 多维数组的空间想象 一维数组:一列长表或一个向量二维数组:一个表格或一个平面矩阵三维数组:三位空间的一个方阵多维数组:多维空间的一个数据矩阵 …