项目使用Kafka镜像报错处理记录:this server does not host this topic-partition
背景
- 项目使用docker swarm部署
- 服务之间使用消息中间件 kafka 通信
- Kafka 使用 star 3.7k 的
wurstmeister/kafka:2.12-2.2.1镜像 - Zookeeper 使用
zookeeper:3.5.5镜像
问题描述
每当Kafka和Zookeeper服务重启后,项目就会报以下错误:
org.apache.kafka.common.errors.UnknownTopicOrPartitionException:
This server does not host this topic-partition
由于是开发环境,之前每次遇到这种问题,都是粗鲁的直接清掉Kafka和Zookeeper的存储文件,随后重启就工作正常。
在切CICD环境之前,我们一直使用物理机部署程序在跑,在物理机上安装的Kafka和Zookeeper, 项目运行了一年多从来没出现过这种问题。
排查问题
首先仔细阅读了kafka镜像的readme文件,问题出现在下面这块:
By default each broker will get a new port number and broker id on restart. Depending on your use case this might not be desirable. If you need to use specific ports and broker ids, modify the docker-compose configuration accordingly.
默认情况下,在重启Kafka镜像时每个broker会获取一个新的broker id。在你的项目中,这种机制或许是不合适的。如果你需要用指定的broker ids,请相应地修改你的docker-compose配置。
看了这一段说明,我追踪了以下zookeeper中 /borkers/ids 下面的节点信息,发现每次重启Kafka之后,都会生成新的id出来,这就是问题的根本。
于是我接着查看了一下物理机上Kafka的配置文件,发现 broker id 在配置项中是固定值 0。

解决方案
- 修改 docker-compose 文件中 kafka 的配置,明确配置 Kafka 的
broker id,例如:环境变量添加KAFKA_BROKER_ID: 0 - 通过 BROKER_ID_COMMAND 命令配置,例如:BROKER_ID_COMMAND: "hostname | awk -F'-' '{print $$2}'"
- 如果你的环境支持自动伸缩,那么推荐使用
--no-recreate选项来确保container不会重新创建,这样就会保留之前生成的broker id
关注公众号:JAVA九点半课堂,这里有一批优秀的程序猿,加入我们,一起探讨技术,共同进步!回复“资料”获取 2T 行业最新资料!
项目使用Kafka镜像报错处理记录:this server does not host this topic-partition的更多相关文章
- maven项目使用tomcat启动报错:Server Tomcat v8.5 Server at localhost failed to start
背景说明:1)该项目为maven项目,使用的maven的本地仓库里有不少之前使用过下载的jar包: 2)从svn下载该项目后,无报错情况: 3)部署到tomcat启动报错 如下 : 4)在网上搜索了很 ...
- 【项目启动】 tomcat启动,项目无法启动,无法正常访问/项目可以启动,报错:java.lang.ClassNotFoundException: ContextLoaderListener
使用maven搭建项目(这个错误和是不是使用maven搭建项目没有关系),然后部署到tomcat中运行. 出现问题1: tomcat跑起来了,但是启动时间很短,没有报错,项目不能正常访问 项目启动时间 ...
- Java Web项目(Extjs)报错五
1. Java Web项目(Extjs)报错五 具体报错如下: usage: java org.apache.catalina.startup.Catalina [ -config {pathname ...
- Java Web项目(Extjs)报错四
1.Java Web项目(Extjs)报错四 具体报错如下: usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ...
- Java Web项目(Extjs)报错三
1. Java Web项目(Extjs)报错三 具体报错如下: at org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEng ...
- Java Web项目(Extjs)报错二
1.Java Web项目(Extjs)报错二 具体报错如下: usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ...
- NetBeans部署项目(Extjs)报错(二)
NetBeans部署项目(Extjs)报错(二) 1.具体错误如下: Using CATALINA_BASE: "C:\Users\Administrator.FOXB2MKB3RGUNIL ...
- NetBeans部署项目(Extjs)报错(一)
NetBeans部署项目(Extjs)报错(一) 1.用NetBeans将项目部署到Tomcat中,报错. 具体如下: ant -f D:\\NetBeans\\workspace\\Foundati ...
- Java Web项目(Extjs)报错九
1.Java Web项目(Extjs)报错九 具体报错如下: 三月 26, 2014 11:48:35 下午 org.hibernate.util.JDBCExceptionReporter logE ...
随机推荐
- python常用函数 Z
zip(iterable, iterable..) 数据打包和解包,一般结果是一个元组(最短匹配). 例子:
- 解决pycharm运行py文件时只有unittest选项的方法
有时候在编完脚本开始运行时,发现某个py脚本右键运行的选项不是run,二是run in unittest,试过很多方法都不能很好的去除,主要是因为脚本中含有test字符串,一种解决方法是将脚本中所有的 ...
- ForkJoinPool详解
本文的主要目的是介绍 ForkJoinPool 的适用场景,实现原理,以及示例代码. 说在前面可以说是说明,也可以说下面是结论: ForkJoinPool 不是为了替代 ExecutorService ...
- [php代码审计] php四种标记
php手册中的介绍: 可以在 PHP 中使用四对不同的开始和结束标记.其中两种,<?php ?> 和 <script language="php"> < ...
- ubuntu idea 安装
一.下载 1.进入官网 下载对应安装包 https://www.jetbrains.com/idea/download/#section=linux sudo wget https://downloa ...
- JavaScript 工作原理之十-使用 MutationObserver 监测 DOM 变化
原文请查阅这里,略有删减,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland. 本系列持续更新中,Github 地址请查阅这里. 这是 JavaScript 工作原理的第十章. 网络 ...
- Linux安装mysql5.6.33
1.下载mysql安装包: 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 下载版本:我这里选择的5.6.33,通用版,lin ...
- OC + RAC (四) combineLatest和merg
-(void)_test4{ ///RAC combineLatest和merge // combineLatest只有当两个信号都发送了 订阅者才能收到信息 结果一次收到 结果是数组 // merg ...
- RabbitMQ-Window安装(一)
1.登录RabbitMq官网http://www.rabbitmq.com/ 2.点击Get Started 3.点击Download+Installation 4.找到Windows,点击 5.点击 ...
- ubuntu18.04英文环境解决各种软件中文乱码问题
如果要同时支持中文也支持英文,进入到该软件的字体设置界面,字体格式选择为: Noto Sans CJK SC