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

kafka hang 问题记录

参考文档

https://cloud.tencent.com/developer/article/1821477

9092端口

端口9092通常与Apache Kafka关联。
Kafka是一个开源的分布式事件流平台,用于构建实时的数据管道和流应用。
它能够处理任意大小的数据,以容错的方式处理数据流。

在默认配置中,Kafka的代理(Broker)监听9092端口以接收来自生产者(Producers)、消费者(Consumers)以及其他Kafka代理的连接请求。
生产者将事件数据发送到Kafka,而消费者从Kafka读取这些数据。这些操作都通过9092端口完成。

注意
尽管9092是Kafka默认的端口,但它可以在Kafka的配置文件中进行修改。
这在多代理部署或网络策略需要其他端口时非常有用。

kafka-consumer-groups.sh

kafka-consumer-groups.sh 是 Apache Kafka 分发包中的一个 shell 脚本,用于列出所有消费者组
描述消费者组的详细信息,或者删除消费者组信息。

列出所有消费者组:
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list

描述特定消费者组的详细信息:
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group my-group --describe

删除特定消费者组的信息:
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group my-group --delete

注意:–bootstrap-server 参数指定了 Kafka 集群的一个或多个 broker 地址
如果Kafka集群布署在别的主机或者端口,那么需要修改localhost:9092参数,指向真正的Kafka集群地址

只要命令中的 --bootstrap-server 参数正确地指向了 Kafka 集群中的任意一个可用的 Broker 地址
kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list 命令就能够列出该 Kafka 集群中的全部消费者组。

topic的leader为-1

如果一个topic的leader为-1,那通常意味着这个topic的所有副本都不可用。
Kafka中每个partition都有一个leader副本,所有的读写操作都会通过这个leader副本进行。
每个partition还可以有一个或多个follower副本,它们会尽可能地同步leader副本的数据,以提供高可用性和故障转移。

如果leader副本宕机或者其他原因不可用,那么Kafka会从follower副本中选举一个新的leader。
但是如果没有可用的follower副本(比如所有副本都宕机或者消失),
那么这个partition就没有可用的leader,leader的id就会显示为-1。

此时,这个partition就无法正常工作,任何试图读取或写入这个partition的操作都会失败。
需要尽快恢复副本,使partition重新有可用的leader。
可以检查Kafka集群的健康状况,并查看为什么所有的副本都不可用。
可能的原因包括磁盘故障、网络故障、Kafka broker配置问题等。

kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic your_topic_name
在运行这个命令后,会输出一些列的信息
包括每个partition的ID,当前的leader,及副本和ISR(in-sync replica,同步副本)的列表

注意
Kafka集群的每个partition都有一个leader,所以一个topic可能有多个leader,分别负责不同的partition

HW采集程序,采集某个消费组下某个topic的情况

首先需要一个运行环境 (例如 Python) 并安装相应的库 (如 HW Python SDK)
然后需要连接到 Kafka 集群并订阅主题

from hwsdk import get_consumer
import time# 定义消费组和相关主题
group_id = 'your_group_id'
topics = ['topic1', 'topic2']# 创建消费者实例
consumer = get_consumer(group_id)# 订阅多个主题
consumer.subscribe(topics)# 采集数据
while True:# 在Python里面,消费者库会自动处理__consumer_offsets的读写# 只需要调用poll()或者consume()等方法就能读取到新的消息,并且库会自动更新偏移量# 如果想要手动控制偏移量,也可以使用commit()等方法msg = consumer.poll(1.0)if msg is None:continueif msg.error():print("Consumer error: {}".format(msg.error()))continueprint('Received message: {}'.format(msg.value().decode('utf-8')))time.sleep(5)  # 每5秒采集一次数据# 退出时关闭消费者连接
consumer.close()

hang住问题记录

前端时间debug问题时,消费侧hang住,积压严重,迁移了消费者还是会hang住
分区offset更新到最新后(直接丢弃业务数据用于止损),积压消除,但是后续又慢慢积压上来了

问题原因

消费侧的代码逻辑是个for循环,因为某些异常业务导致for循环5分钟以上仍未执行结束
单分区被hang住后,offset无法往前移动,导致该分区后续消息积压

解决办法

如果某个分区因为某个实例被hang住,重置某分区的offset到最新后,因为没有重启消费侧的服务
所以被hang住的消费实例还是会一直处理这个消息直到结束
处理完后提交offset时,Broker才会忽略该offset,因为offset已经重置到最新
因为处于配置封禁期,因此临时将for循环添加过滤和及时退出逻辑,才解决该问题

复线

创建一个topic,设置两个分区0和1
Broker配置滑动窗口限制为3,worker数量3,worker缓冲大小3
消费侧配置两个消费者,奇数key不阻塞,偶数key hang住10分钟(for循环20次,每次sleep 30秒)
单分区被hang住后,offset无法往前移动,导致该分区后续消息积压
发送消息,让单分区hang住,消息产生积压,当600秒执行完之后,后面的消息正常处理

__consumer_offsets

Kafka内部用于追踪消费者组对主题分区进行消费的偏移量的特殊topic。
每个消费者组对每个主题的每个分区都有一个偏移量,表示这个消费者组最后一次消费到这个分区的哪个位置。
这样在消费者重启或者其他故障恢复的时候,可以从这个位置开始接着读,不会丢失中间的消息。

__consumer_offsetstopic通常对用户是不可见的,因为它存储的是Kafka的内部数据。
对于一般的应用开发,不需要也不应该去直接操作这个topic。
但是对于理解Kafka的工作机制,以及进行一些底层的调整优化等工作,了解这个概念还是有帮助的。

相关文章:

kafka hang 问题记录

参考文档 https://cloud.tencent.com/developer/article/1821477 9092端口 端口9092通常与Apache Kafka关联。 Kafka是一个开源的分布式事件流平台,用于构建实时的数据管道和流应用。 它能够处理任意大小的数据,以容错的方式处理数据流。 在默认配置…...

Jmeter-BeanShell脚本中for循环里面使用random随机数函数,每次生成的都一样

预想的是每次循环生成的随机数不一样,但实际使用Random函数生成的是重复的。 以下是部分原代码: List updateList new ArrayList(); for(Object o: fieldList){Map map new HashMap();map.put("id", o.get("id"));map.put("…...

高级编程。JavaScript中有哪些类型转换机制?

一、概述 前面我们讲到,JS中有六种简单数据类型:undefined、null、boolean、string、number、symbol,以及引用类型:object 但是我们在声明的时候只有一种数据类型,只有到运行期间才会确定当前类型 let x y ? 1 : …...

Linux系统下常用软件安装汇总,包括mysql,java,git,redis等

01.环境搭建 1.安装列表 MySQL 5.7.11 Java 1.8 Apache Maven 3.6 tomcat8.5 git Redis Nginx python docker 2.安装mysql 1.拷贝mysql安装文件到Linux的某个目录下 2.解压Linux安装包:tar -xvzf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz 3.进入解压后…...

【Linux】——期末复习题(一)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…...

【论文阅读】Speech Driven Video Editing via an Audio-Conditioned Diffusion Model

DiffusionVideoEditing:基于音频条件扩散模型的语音驱动视频编辑 code:GitHub - DanBigioi/DiffusionVideoEditing: Official project repo for paper "Speech Driven Video Editing via an Audio-Conditioned Diffusion Model" paper&#…...

【华为 ICT HCIA eNSP 习题汇总】——题目集4

1、(多选)网络中出现故障后,管理员通过排查发现某台路由器的配置被修改了,那么管理员应该采取哪些措施来避免这种状况再次发生? A、管理员应该通过配置 ACL 来扩展只有管理员能够登录设备 B、管理员应该在路由的管理端…...

hadoop-common: CMake failed with error code 1

问题 在编译hadoop源码时遇到如下错误 hadoop-common: CMake failed with error code 1 看了这个错误表示一脸懵逼 排查 在mvn 的命令中增加 -X 和 -e mvn clean package -e -X -Pdist,native -DskipTests -Dmaven.javadoc.skip -Dopenssl.prefix/usr/local/bin/openssl 在…...

【面试】-科大讯飞日常实习面试

科大讯飞日常实习面试 提问的问题 面试30min,基本就是介绍项目以及提问java八股文,没有算法题 java保证线程安全的方法 需要根据具体场景选择合适的方法来保证线程安全。java中的异步请求如何实现你的SpringBoot项目怎么匹配在线人数请说出spring springMVC springboot之间的…...

MySQL 数据加密

MySQL 数据加密主要用于保护存储在数据库中的敏感信息,如用户密码、个人身份信息等。MySQL 提供了多种数据加密方法,主要包括: 对称加密: AES_ENCRYPT() 和 AES_DECRYPT() 函数:MySQL 支持使用高级加密标准&#xff08…...

风丘科技为您提供完整的ADAS测试方案

一 方案概述 随着5G通讯与互联网的快速发展,智能汽车和ADAS辅助系统的研究与发展在世界范围内也在如火如荼地进行。风丘科技紧跟时代脚步,经多年积累沉淀,携手整车厂与高校共同研发打造出了一套完整且适用于国内ADAS测试的系统方案。 | ADAS…...

深入理解Rust基本类型

文章目录 一、概述二、数值类型2.1、整数类型2.2、浮点类型2.3、数字运算2.4、位运算2.5、序列(Range)2.6、有理数和复数 三、字符、布尔、单元类型3.1、字符类型3.2、布尔类型(bool)3.3、单元类型 团队博客: 汽车电子社区 一、概…...

cloudflare加速方法

一、使用Cloudflare优速域名或IP,实现国内访问加速 二、使用境外CN2、GIA等直连联网的VPS:如华纳云、彩红云等(未测试) 三、页面托管方案: 四、cloudflare合作伙伴计划:自定义cdn节点、dnspod提供的dns解析…...

密码学学习笔记(二十四):TCP/IP协议栈

TCP/IP协议栈的基础结构包括应用层、传输层、网络层、数据链路层和物理层。 应用层 应用层位于TCP/IP协议栈的最顶层,是用户与网络通信的接口。这一层包括了各种高级应用协议,如HTTP(用于网页浏览)、FTP(用于文件传输…...

软件测试阶段简介_单元测试、集成测试、配置项测试、系统测试

文章目录 前言一、软件测试“V”模型二、单元测试三、集成测试四、配置项测试五、系统测试总结 前言 一般来说,按照软件的研制阶段划分,软件测试可分为单元测试、集成测试、配置项测试、系统测试等。本文将对上述各测试阶段进行逐一介绍。 一、软件测试…...

AcWing 1204.错误票据(读取未知个数数据的新方法)

[题目概述] 某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。 因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另…...

项目上线存在的缓存问题以及存在的debugger和console.log等问题

下载uglifyjs-webpack-plugin插件 在vue.config文件中进行配置 publicPath: process.env.NODE_ENV production ? ./ : /,outputDir: n-sim-ipc-manage-build,productionSourceMap: false,configureWebpack: config > {//打包文件增加hashconfig.output.filename js/[nam…...

均线和布林线这样的关系,WeTrade众汇实例这样使用

在后台经常有交易者咨询:“我可以用加权平均线或指数代替移动平均线吗?”理论上,任何平均值都适合绘制BB。在回答这个问题之前,为了稳妥起见,WeTrade众汇通过对各种均线对比分析,却得出这样结论:经典均线是构建参考点最简单、最准…...

C++中的区块链与加密货币开发

区块链和加密货币是当前科技领域中备受关注的热门话题。C作为一种高效的编程语言,被广泛应用于区块链和加密货币的开发。在本篇文章中,我将介绍C在区块链和加密货币开发中的重要性以及其应用方面。 区块链开发框架:C提供了多种区块链开发框架…...

【云略】2023年新茶饮行业社媒营销洞察报告

(因篇幅有限,推文仅展示部分内容) 2023新茶饮行业卷的比往年更厉害。 在整体市场环境快速增长的情况下,新茶饮品牌纷纷开始拼产品、抢联名、赶上市,搞下沉,整个行业进入到一个新的博弈阶段。 2023年蜜雪冰城…...

19. C++ static关键字

1. static关键字 不考虑类的情况 隐藏-所有不加static的全局变量和函数具有全局可见性,可以在其他文件中使用,加了之后只能在该文件所在的编译模块中使用,即内部连接默认初始化为0,包括未初始化的全局静态变量与局部静态变量&am…...

thinkphp6 模糊查找json下的字段值

写法: where(json的字段->json下的字段) sql生成json_extract(json的字段,$.json下的字段1.json下的字段2) 可以加上like where(‘‘json的字段->json下的字段, ‘like’, ‘%’. keyword .’%’) sql生成json_extract(json的字段,$.js…...

链表存数相加算法(leetcode第2题)

题目描述: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这…...

旅游项目day07

目的地攻略展示 根据目的地和主题查询攻略 攻略条件查询 攻略排行分析 推荐排行榜:点赞数收藏数 取前十名 热门排行榜:评论数浏览数 取前十名 浏览数跟评论数差距过大,可设置不同权重,例如:将浏览数权重设置为0.3…...

java黑马学习笔记

数组 变量存在栈中&#xff0c;变量值存放在堆中。 数组反转 public class test{public static void main(String[] args){//目标&#xff1a;完成数组反转int[] arr {10,20,30,40,50};for (int i 0,j arr.length - 1;i < j;i,j--){int tep arr[j]; //后一个值赋给临时…...

WordPress后台底部版权信息“感谢使用 WordPress 进行创作”和版本号怎么修改或删除?

不知道各位WordPress站长在后台操作时&#xff0c;是否有注意到每一个页面底部左侧都有一个“感谢使用 WordPress 进行创作。”&#xff0c;其中WordPress还是带有nofollow标签的链接&#xff1b;而页面底部右侧都有一个WordPress版本号&#xff0c;如下图中的“6.4.2 版本”。…...

解决字符串类型转数字类型相加结果异常问题

js字符串类型转换数字类型有七种方法&#xff0c;分别是parseInt()&#xff0c;parseFloat()&#xff0c;Math.floor()&#xff0c;乘以数字&#xff08;*1&#xff09;&#xff0c;Number()&#xff0c;双波浪号 (~~number)&#xff0c;一元运算符&#xff08;number&#xff…...

android 开发 W/TextToSpeech: speak failed: not bound to TTS engine

问题 笔者使用TTS(TextToSpeech)对于文本内容进行语音播报&#xff0c;控制台报错 android 开发 speak failed:not bound to TTS engine详细问题 笔者核心代码&#xff1a; import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.speech.tts.…...

Java代码审计Shiro反序列化DNS利用链CC利用链AES动态调试

目录 0x00 前言 0x01 Java原生反序列化介绍 0x02 安全问题1&#xff1a;重写toString方法&#xff08;打印对象时触发&#xff09; 0x03 安全问题2&#xff1a;重写readObject&#xff08;反序列化时触发&#xff09; 0x04 测试URLDNS链 0x05 Shiro550生成RememberMe Coo…...

【MySQL】临时变量用法

力扣题 1、题目地址 2388. 将表中的空值更改为前一个值 2、模拟表 表&#xff1a;CoffeeShop Column NameTypeidintdrinkvarchar id 是该表的主键&#xff08;具有唯一值的列&#xff09;。该表中的每一行都显示了订单 id 和所点饮料的名称。一些饮料行为 null。 3、要求…...