kafka服务器死机消息,当kafka集群其中一台宕机后,会怎么样?

一、介绍

我们搭建好kafka集群后,对其进行性能测试。遇到这种场景:我搭建好了三台kakfa集群,然后停掉其中一台kafka,然后集群是否能正常工作呢?

7feb80e5de12750798aef57166c1b7d5.png

kafka集群:

192.168.183.53 节点1

192.168.183.55 节点2

192.168.183.62 节点3

创建的主题是hw_data:

三个分区、三个副本

./kafka-topics.sh --create --zookeeper 192.168.183.53:2181 --topic hw_data --partitions 3 --replication-factor 3 二、问题

三个节点启动以后,集群正常工作,正常生产、正常消费。

但是当我们停掉其中一个节点后,发现集群不能正常工作了。

三、原因

我的这个问题的凶手是:__consumer_offsets

首先查看系统的_offsets副本是几个?

./kafka-topics.sh --describe --zookeeper 192.168.183.53|grep consumer_offsets

390b2b56328924c2d1ebf07db01b177c.png

我们看到 副本数为1,这就是导致我们当一个节点宕机后集群无法正常工作的原因!

__consumer_offsets这个topic是由kafka自动创建的,默认50个,但是都存在一台kafka服务器上,这是不是就存在很明显的单点故障?

经测试,如果将存储consumer_offsets的这台机器kill掉,所有的消费者都停止消费了。

__consumer_offsets是一个非常重要的topic,我们怎么能允许它只有一个副本呢?这样就存在单点故障,也就是如果该分区所在的集群宕机了的话,我们的消费者就无法正常消费数据了。

四、解决办法

1.修改系统_offsets副本数为3

修改kafka的核心配置文件server.properties

将num.partitions参数(默认为1)修改为3,

另外需要添加auto.create.topics.enable=true ,如果没有对应的topic可以主动创建topic。

8387611cf4d2ceb790b5af1d8ef43529.png

由于__consumer_offsets是kafka默认的主题,无法删除,我们可以删除zookeeper中的__consumer_offsets。

进入zookeeper/bin目录执行./zkCli.sh

ls /broksers/topicsrmr /broksers/topics/__consumer_offsetsls /broksers/topics

6115352a4d2b9c85b0af80df9f2b7c33.png

先将集群停掉

在重新启动zookeeper和kafka

再次查看__consumer_offsets。发现副本数已经是3

4c0b426e93a0507d80d9329b106af5ad.png

在节点1修改__consumer_offsets后,在节点2和节点3查看__consumer_offsets发现副本数已经变为3,不需要再进行修改。

3b699da9776536c0e90f116884245d2b.png

9a7bee224e9a059580b687945b204d22.png

我的问题到这里就解决了:

启动kafka集群三个节点,然后停掉其中任意一个节点,集群是可以正常工作的。

2.修改创建的topic的副本数为3

查看创建的topic的副本数是否为1

8c7c587cb38947e398b7905b07a7ce89.png

Bug1 kafka启动以后没有添加到zk节点

7409f37517e8394b00931f2138642619.png

进入zookeeper的bin目录,执行./zk.Cli.sh

删除brokers下的ids

ls /brokers/idsrmr /brokers/ids

重启kafka,应该就可以了。

Bug2 无法删除topic

我首先使用rmr /brokers/topics/topicname删除了zookeeper中的topic ,这样查看kafka中的topic时,显示已经没有了,

但是我又创建我刚刚删除的主题时,发现他已经显示被标记删除。

我的配置文件已经设置了删除topic为true,但是我删除的主题还是显示被标记删除,没有真正的删除

解决办法:

进入zookeeper的bin目录,执行./zk.Cli.sh

删除config、brokers、admin下的对应主题

rmr /config/topics/topicnamermr /brokers/topics/topicnamermr /admin/delete_topics/topicname作者:Liu_Shihao 原文链接:https://blog.csdn.net/DreamsArchitects/article/details/108573887

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

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

相关文章

搭建go项目web服务器,3.2 Go搭建一个Web服务器

前面小节已经介绍了Web是基于http协议的一个服务,Go语言里面提供了一个完善的net/http包,通过http包可以很方便的就搭建起来一个可以运行的Web服务。同时使用这个包能很简单地对Web的路由,静态文件,模版,cookie等数据进…

安卓总线传输协议常用关键词

Android - Keywords of Bus transfer protocolIntroductionKeywords tablebuilding......Introduction 这篇文档用于总结嵌入式系统中总线传输协议的一些关键字供大家查找,工作日晚上和周末会更新,欢迎大家询问、修正——来自华为的底层工程狗的奋斗宣言…

【C语言进阶】 宏定义实现字符串引用

宏定义实现字符串引用原理最简单的引用策略使用#进行转义原理 用宏定义实现字符串引用: 这种做法在编译的时候直接给宏名所对应的字符串 分配了一个内存地址空间,可以进行字符串输出、地址打印、指针操作和索引操作。 最简单的引用策略 最简单的引用策…

git操作大全

git操作大全系统的整理一下git操作二级目录三级目录系统的整理一下git操作 命令功能git branch -a查看当前所有的分支(远端和本地)git branch -vv查看当前分支的细节git branch -D mybranch删除名字为mybranch的分支git checkout mybranch切换mybranch分…

【MATLAB】 csvwrite数据缺失怎么办

MATLAB csvwrite数据缺失怎么办 csv文件介绍 csv文件是一种以纯文本形式存储表格数据并使用逗号分割符分割结构的文件格式,其中,逗号表示数据之间的列分割,换行符表示数据之间的行分割。 csv文件通常用于二维数据的存储,十分适…

【Leetcode1365】有多少小于当前数字的数字:详解

[Leetcode1365] 有多少小于当前数字的数字 1. 题目 给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。 换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j ! i 且 nums…

【interview17.10】 主要元素:详解

interview17.10 主要元素 1.题目 数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。 2.算法 3.排序算法 计数器 解题思路:从题干分析,我们需要找到数组中数量占比多于一半&…

【C语言基础】C语言构建定长字典

C语言构建定长字典 1.C语言简介-struct C语言中没有字典。而有些场合下需要统计一些字符串变量的累计值,就需要用定长字典。定长字典顾名思义就是长度固定的字典。在C语言中结构体可以定义任意类型数据的集合,也就可以通过结构体数组来构造个定长字典。…

【Leetcode819】最常见的单词

Leetcode819 最常见的单词 1.题目 给定一个段落 (paragraph) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。 题目保证至少有一个词不在禁用列表中,而且答案唯一。 禁用列表中的单词用小写字母表示,不含标点…

[LCP28] 采购方案

LCP 28 采购方案 1.题目 小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。 注意:答案需要以 1e9 7 (1000000007) 为底取模&#xff0c…

搜索引擎排序DEMO

搜索引擎排序DEMO #include<stdio.h>int lookarr(int* arr, int arrSize) {for (int i 0; i < arrSize; i) {printf("%d, ", arr[i]);}printf("\n"); }int lookarr2(int** arr, int arrSize) {printf("\n");for (int i 0; i < 6;…

[Leetcode16]最接近的三数之和

[Leetcode16]最接近的三数之和 转载自leetcode https://leetcode-cn.com/problems/3sum-closest/ 1.题目 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数&#xff0c;使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在…

高压特种作业考试易错总结

高压上岗证考试&#xff0c;2021年6月考过啦&#xff0c;发出来与大家共勉。 安全&#xff1a; 安全责任 —— 横向到边、纵向到底电工作业人员根据实际情况遵守法规&#xff08;错&#xff0c;&#xff09;应该严格遵守。脱离电源 —— 单手操作&#xff0c;绝缘工具防止电气…

DEEPIN教程 - 本地安装Typora

本地安装Typora 一. 下载Typora安装包 访问https://www.typora.io/#linux路径进行下载。 二. 解压下载的tar.gz文件 tar -xvf Typora-linux-x64.tar.gz三. 将解压后的可执行文件添加到dash路径 1. 首先在解压路径下需要关注如下路径文件。 可执行文件Typora 和 2. 文件夹i…

函数指针史上最全的介绍

函数指针 一. 函数指针的概念 如果在程序中定义了一个函数&#xff0c;那么在编译时系统就会为这个函数代码分配一段存储空间&#xff0c;这段存储空间的首地址称为这个函数的地址。而且函数名表示的就是这个地址。既然是地址我们就可以定义一个指针变量来存放&#xff0c;这…

C语言调试技巧:stdin,stdout,stderr

stdin,stdout,stderr流 介绍 stdin&#xff0c;stdout&#xff0c;stderr是标准的输入输出流。其中&#xff0c;stdin是访问键盘输入&#xff0c;stdout和stderr分别是向终端输出数据。 关键函数 fscanf/fprintf /* 所在头文件 */ #include <stdio.h>int fscanf(FILE…

C语言调试技巧:main函数输入参数

带入参的main函数 介绍 带入参的main函数主要用于一些基本调试&#xff0c;main函数的入参在main函数里被解析为字符串&#xff0c;因此根据具体的调试业务可以需要将字符串转为相应的int类型或double类型进行其他的操作。 函数实现 // test_mainin.c #include <stdio.h…

[Leetcode456]132模式 - 单调栈

[Leetcode456]132模式 - 单调栈 给你一个整数数组 nums &#xff0c;数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成&#xff0c;并同时满足&#xff1a;i < j < k 和 nums[i] < nums[k] < nums[j] 。 暴力遍历&#xff0c;…

[Deepin - Pycharm] PyQT5安装配置

[Deepin - Pycharm] PyQT5安装配置 1.环境依赖 python3基础环境&#xff0c; pip下载器 pycharm编辑器 2. 从系统环境中安装pyqt5, qtdesigner >>> pip install pyqt5 >>> sudo apt-get install pyqt5* >>> sudo apt-get install qt5-default …

[Deepin - Pycharm调试记录] Pyinstaller索引系统库问题

Deepin - Pycharm调试记录 - Pyinstaller索引不到系统库 现象 在Pycharm的Terminal中执行Pyinstaller指令时候遇到如下报错提示 OSError: Python library not found: libpython3.7mu.so.1.0, libpython3.7.so.1.0, libpython3.7.so, libpython3.7m.so.1.0, libpython3.7m.so…