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

如何更好地使用Kafka? - 运行监控篇

要确保Kafka在使用过程中的稳定性,需要从kafka在业务中的使用周期进行依次保障。主要可以分为:事先预防(通过规范的使用、开发,预防问题产生)、运行时监控(保障集群稳定,出问题能及时发现)、故障时解决(有完整的应急预案)这三阶段。

另外的篇幅请参考

如何更好地使用Kafka? - 事先预防篇-CSDN博客

如何更好地使用Kafka? - 故障时解决-CSDN博客

运行时监控主要包含集群稳定性配置与Kafka监控的最佳实践,旨在及时发现Kafka在运行时产生的相关问题与异常。

1. 集群稳定性监控

1.1 kafka集群配置

合理进行kafka实例配,主要关注这几个数据:

  1. 磁盘容量和峰值带宽

  2. 消息保留时长;

  3. 动态保留策略;

A. 磁盘容量和峰值带宽

可根据实际业务的消息内容大小、发送消息qps等进行预估,可以尽量设置大点;具体数值可根据实例监控查看,如果短时间内磁盘使用百分比就达到较高值,则需扩容。

峰值带宽=最大生产流量*副本数

B. 消息保留时长

消息即使被消费,也会持久化到磁盘存储保留时长的时间。该设置会占用磁盘空间,如果每天消息量很大的话,可适当缩短保留时间。

C. 动态保留策略

推荐开启动态保留设置。当磁盘容量达到阈值,则删除最早的消息,最多删除到保底时长范围外的消息(淘汰策略),可以很大程度避免磁盘被打满的情况。

但有调整时不会主动通知,但我们可以通过配置告警感知磁盘容量的变化。

1.2 Kafka集群配置

  • 设置日志配置参数以使日志易于管理;

  • 了解 kafka 的(低)硬件需求;

  • 充分利用 Apache ZooKeeper;

  • 以正确的方式设置复制和冗余;

  • 注意主题配置;

  • 使用并行处理;

  • 带着安全性思维配置和隔离 Kafka;

  • 通过提高限制避免停机;

  • 保持低网络延迟;

  • 利用有效的监控和警报。

1.3 资源隔离

A. Broker级别物理隔离

如果不同业务线的 topic 会共享一块磁盘,若某个consumer 出现问题而导致消费产生 lag,进而导致频繁读盘,会影响在同一块磁盘的其他业务线 TP 的写入。

解决:Broker级别物理隔离:创建Topic、迁移Topic、宕机恢复流程

B. RPC队列隔离

Kafka RPC 队列缺少隔离,一旦某个 topic 处理慢,会导致所有请求 hang 住。

解决:需要按照控制流、数据流分离,且数据流要能够按照 topic 做隔离。

  1. 将 call 队列按照拆解成多个,并且为每个 call 队列都分配一个线程池。

  2. 一个队列单独处理 controller 请求的队列(隔离控制流),其余多个队列按照 topic 做 hash 的分散开(数据流之间隔离)。

如果一个 topic 出现问题,则只会阻塞其中的一个 RPC 处理线程池,以及 call 队列,可以保障其他的处理链路是畅通的。

1.4 智能限速

整个限速逻辑实现在 RPC 工作线程处理的末端,一旦 RPC 处理完毕,则通过限速控制模块进行限速检测。

  1. 配置等待时间,之后放入到 delayed queue 中,否则放到 response queue 中。

  2. 放入到 delayed queue 中的请求,等待时间达到后,会被 delayed 线程放入到 response queue 中。

  3. 最终在 response queue 中的请求被返回给 consumer。

2. Kafka监控

  • 白盒监控:服务或系统自身指标,如CPU 负载、堆栈信息、连接数等;

  • 黑盒监控:一般是通过模拟外部用户对其可见的系统功能进行监控的一种监控方式,相关指标如消息的延迟、错误率和重复率等性能和可用性指标。

监控

功能/指标

详情

黑盒监控

操作

主题操作:创建、预览、查看、更新、删除

服务

数据写入、是否消费成功

系统

CPU 负载、堆栈信息、连接数等

白盒监控

容量

总存储空间、已用存储空间、最大分区使用、集群资源、分区数量、主题数量;

流量

消息写入、消费速率、集群网络进出;

延迟

消息写入、消费耗时(平均值、99分位、最大耗时)、主题消费延迟量(offset lag)

错误

集群异常节点数量、消息写入拒绝量、消息消费失败量、依赖zookeeper的相关错误

2.1 kafka告警、配置和预案

针对kafka,需要配置告警(此类告警一般为消息积压、可用性、集群/机器健康性等检查)。

A. 指标

如:实例健康状态、节点数量、健康节点数量、问题分区数、生产消息数、消费请求数、jvm内存利用率、平均生产响应时间、分区消费偏移量等。

具体指标可以参考:消息队列 CKafka 版 查询高级监控(专业版)-操作指南-文档中心-腾讯云

B. 配置

配置文档:消息队列 CKafka 版 配置告警-操作指南-文档中心-腾讯云

选择监控实例,配置告警内容和阈值。

一般会对当前服务自身的kafka集群做告警配置,但是如果是依赖自身消息的下游服务出现消费问题,我们是感知不到了;而且针对消费端服务不共用同一个集群的情况,出现消息重复发送的问题,服务自身是很难发现的。

C. 预案

在业务上线前,最好梳理下自身服务所涉及的topic消息(上游生产端和下游消费端),并细化告警配置,如果出现上游kafka异常或者下游kafka消息堆积可以及时感知。特别需要把可能有瞬时大量消息的场景(如批量数据导入、定时全量数据同步等)做一定的告警或者预案,避免服务不可用或者影响正常业务消息。

2.2 自建告警平台

通过自建告警平台配置对服务自身的异常告警,其中包括对框架在使用kafka组件时抛出与kafka消费逻辑过程中抛出的业务异常。

其中,可能需要异常升级的情况(由于)单独做下处理(针对spring kafka):

  1. 自定义kafka异常处理器:实现KafkaListenerErrorHandler接口的方法,注册自定义异常监听器,区分业务异常并抛出;

  2. 消费Kafka消息时,将@KafkaListener的errorHandler参数设置为定义的Kafka异常处理器;

  3. 此后,指定的业务异常会被抛出,而不会被封装成Spring kafka的框架异常,导致不能清晰地了解具体异常信息。

2.3 Kafka监控组件

目前业界并没有公认的解决方案,各家都有各自的监控之道。

  • Kafka Manager:应该算是最有名的专属 Kafka 监控框架了,是独立的监控系统。

  • Kafka Monitor:LinkedIn 开源的免费框架,支持对集群进行系统测试,并实时监控测试结果。

  • CruiseControl:也是 LinkedIn 公司开源的监控框架,用于实时监测资源使用率,以及提供常用运维操作等。无 UI 界面,只提供 REST API。

  • JMX 监控:由于 Kafka 提供的监控指标都是基于 JMX 的,因此,市面上任何能够集成 JMX 的框架都可以使用,比如 Zabbix 和 Prometheus。已有大数据平台自己的监控体系:像 Cloudera 提供的 CDH 这类大数据平台,天然就提供 Kafka 监控方案。

  • JMXTool:社区提供的命令行工具,能够实时监控 JMX 指标。答上这一条,属于绝对的加分项,因为知道的人很少,而且会给人一种你对 Kafka 工具非常熟悉的感觉。如果你暂时不了解它的用法,可以在命令行以无参数方式执行一下kafka-run-class.sh kafka.tools.JmxTool,学习下它的用法。

2.4 Kafka Monitor

其中,Kafka Monitor通过模拟客户端行为,生产和消费数据并采集消息的延迟、错误率和重复率等性能和可用性指标,可以很好地发现下游的消息消费情况进而可以动态地调整消息的发送。(使用过程中需注意对样本覆盖率、功能覆盖率、流量、数据隔离、时延的控制)

Kakfa Monitor 优势:

  1. 通过为每个 Partition 启动单独的生产任务,确保监控覆盖所有 Partition。

  2. 在生产的消息中包含了时间戳、序列号,Kafka Monitor 可以依据这些数据对消息的延迟、丢失率和重复率进行统计。

  3. 通过设定消息生成的频率,来达到控制流量的目的。

  4. 生产的消息在序列化时指定为一个可配置的大小(验证对不同大小数据的处理能力、相同消息大小的性能比较)

  5. 通过设定单独的 Topic 和 Producer ID 来操作 Kafka 集群,可避免污染线上数据,做到一定程度上的数据隔离。

基于Kafka Monitor的设计思想,可以针对业务特点引入对消息的延迟、错误率和重复率等性能的监控告警指标。

相关文章:

如何更好地使用Kafka? - 运行监控篇

要确保Kafka在使用过程中的稳定性,需要从kafka在业务中的使用周期进行依次保障。主要可以分为:事先预防(通过规范的使用、开发,预防问题产生)、运行时监控(保障集群稳定,出问题能及时发现&#…...

数据可视化训练第四天(模拟投掷筛子并且统计频次)

投掷一个筛子 import matplotlib.pyplot as plt from random import randint import numpy as npclass Die:"""模拟投掷筛子"""def __init__(self,num_sides6):self.num_sidesnum_sidesdef roll(self):return randint(1,self.num_sides)num1000…...

4.1 编写程序,从键盘接收一个小写字母,然后找出他的前导字符和后续字符,再按顺序显示这三个字符

方法一: 运行效果: 输入B,输出显示ABC;输入A,输出显示AB 思路: 1、通过键盘输入接收一个字母。 2、将输入的字母减去1,得到前导字符,然后输出。 3、将输入的字母加上1,得…...

(Java)心得:LeetCode——18.四数之和

一、原题 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复): …...

网络编程套接字详解

目录 1. 预备介绍 2.网络字节序 3.udp网络程序 4.地址转换函数 5.udp网络编程 1.预备介绍 1.1源IP地址和目标IP地址 举个例子: 从北京出发到上海旅游, 那么源IP地址就是北京, 目标IP地址就是上海. 1.2 端口号 作用: 标识一个进程, 告诉OS这个数据交给那个进程来处理; (1)…...

蓝桥杯备战11.歌唱比赛

P5738 【深基7.例4】歌唱比赛 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> #define endl \n #define int long long using namespace std; const int N 2e710,M 1e310; int a[N],sum[N];signed main() {//std::ios::sync_with_stdio(0),cin.…...

微信小程序中的图像奥秘:图片与Base64的华丽变身记

微信小程序中的图像奥秘&#xff1a;图片与Base64的华丽变身记 基本概念解析图片与Base64的关系为何转换 图片转Base64实战微信小程序使用wx.getImageInfo获取图片信息图片转换为Base64注意 Base64转图片直接在小程序页面显示云开发环境转换注意 遇遇问题排查思路结语引发讨论 …...

【35分钟掌握金融风控策略25】定额策略实战2

目录 基于收入和负债的定额策略 确定托底额度和盖帽额度 确定基础额度 基于客户风险评级确定风险系数 计算最终授信额度 确定授信有效期 基于收入和负债的定额策略 在实际生产中&#xff0c;客户的收入和负债数据大多无法直接获得&#xff0c;对于个人的收入和负债数据&…...

我和爬虫的故事

文章目录 爬虫简介个人经历未来总结 爬虫简介 网络爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。另外…...

常用的简单友好的工单系统(免费)- WGCAT

最近在项目中&#xff0c;有工单系统的需求场景&#xff0c;所以想寻找一款轻量简单的运维工单软件&#xff0c;主要用来记录和处理工作中的一些故障、维护&#xff0c;主要用来记录设备的维护状态&#xff0c;包括服务器、主机、交换机那些 WGCAT&#xff0c;是一款简单轻量的…...

使用Pycharm编写Python程序时对基本类结构中方法的重写的两种初步操作方式

使用Pycharm编写Python程序时对基本类结构中方法的重写的两种初步操作方式 Python和其他一些高级面向对象的编程语言中&#xff0c;子类可继承父类中的方法&#xff0c;而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法&#xff0c;而是想作一定的修改&…...

HTTP URL 详解

概述 URL 提供了一种定位因特网上任意资源的手段&#xff0c;大多数 URL 语法都由以下九个结构的通用格式组成&#xff1a; <scheme>://<user>:<password><host>:<port>/<path>;<params>?<query>#<frag> 方案&#…...

Python 原生爬虫

Python 描述代码 描述 爬网站的页面配合正则表达式设置定时任务 仅学习参考&#xff0c;切勿使用其他用途 代码 import re import schedule import timefrom urllib.request import urlopenclass Spider:def __init__(self):# 初始化代码...pass# self.start_schedule()# 需要…...

数据结构---经典链表OJ

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 点击主页&#xff1a;optimistic_chen和专栏&#xff1a;c语言&#xff0c; 创作不易&#xff0c;大佬们点赞鼓…...

HTML_CSS学习:CSS像素与颜色

一、像素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>像素</title> </head><style>.atguigu1{/*单位可以是cm&#xff0c;但不能是m,dm*/width: 1cm;height: 1cm;background-c…...

华为交换机配置导出备份python脚本

一、脚本编写思路 &#xff08;一&#xff09;针对设备型号 主要针对华为&#xff08;Huawei&#xff09;和华三&#xff08;H3C&#xff09;交换机设备的配置备份 &#xff08;二&#xff09;导出前预处理 1.在配置导出前&#xff0c;自动打开crt软件或者MobaXterm软件&am…...

DS:时间复杂度和空间复杂度

欢迎各位来到 Harper.Lee 的学习世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦&#xff01; 本片博客主要介绍的是数据结构中关于算法的时间复杂度和空间复杂度的概念。 一、算法 1.1 什么是算法&#xff1f; 算法(Alg…...

AI跟踪报道第41期-新加坡内哥谈技术-本周AI新闻:本周Al新闻: 准备好了吗?事情即将変得瘋狂

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

Go 之 interface接口理解

go语言并没有面向对象的相关概念&#xff0c;go语言提到的接口和java、c等语言提到的接口不同&#xff0c;它不会显示的说明实现了接口&#xff0c;没有继承、子类、implements关键词。go语言通过隐性的方式实现了接口功能&#xff0c;相对比较灵活。 interface是go语言的一大…...

简约在线生成短网址系统源码 短链防红域名系统 带后台

简约在线生成短网址系统源码 短链防红域名系统 带后台 安装教程&#xff1a;访问 http://你的域名/install 进行安装 源码免费下载地址抄笔记 (chaobiji.cn)https://chaobiji.cn/...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...

Canal环境搭建并实现和ES数据同步

作者&#xff1a;田超凡 日期&#xff1a;2025年6月7日 Canal安装&#xff0c;启动端口11111、8082&#xff1a; 安装canal-deployer服务端&#xff1a; https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...

[C++错误经验]case语句跳过变量初始化

标题&#xff1a;[C错误经验]case语句跳过变量初始化 水墨不写bug 文章目录 一、错误信息复现二、错误分析三、解决方法 一、错误信息复现 write.cc:80:14: error: jump to case label80 | case 2:| ^ write.cc:76:20: note: crosses initialization…...