背景

  1. 项目使用docker swarm部署
  2. 服务之间使用消息中间件 kafka 通信
  3. Kafka 使用 star 3.7k 的 wurstmeister/kafka:2.12-2.2.1 镜像
  4. Zookeeper 使用 zookeeper:3.5.5 镜像

问题描述

每当Kafka和Zookeeper服务重启后,项目就会报以下错误:

org.apache.kafka.common.errors.UnknownTopicOrPartitionException:
This server does not host this topic-partition

由于是开发环境,之前每次遇到这种问题,都是粗鲁的直接清掉KafkaZookeeper的存储文件,随后重启就工作正常。

在切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。

解决方案

  1. 修改 docker-compose 文件中 kafka 的配置,明确配置 Kafka 的 broker id,例如:环境变量添加 KAFKA_BROKER_ID: 0
  2. 通过 BROKER_ID_COMMAND 命令配置,例如:BROKER_ID_COMMAND: "hostname | awk -F'-' '{print $$2}'"
  3. 如果你的环境支持自动伸缩,那么推荐使用 --no-recreate 选项来确保 container 不会重新创建,这样就会保留之前生成的 broker id

欢迎访问我的个人博客

关注公众号:JAVA九点半课堂,这里有一批优秀的程序猿,加入我们,一起探讨技术,共同进步!回复“资料”获取 2T 行业最新资料!

项目使用Kafka镜像报错处理记录:this server does not host this topic-partition的更多相关文章

  1. maven项目使用tomcat启动报错:Server Tomcat v8.5 Server at localhost failed to start

    背景说明:1)该项目为maven项目,使用的maven的本地仓库里有不少之前使用过下载的jar包: 2)从svn下载该项目后,无报错情况: 3)部署到tomcat启动报错 如下 : 4)在网上搜索了很 ...

  2. 【项目启动】 tomcat启动,项目无法启动,无法正常访问/项目可以启动,报错:java.lang.ClassNotFoundException: ContextLoaderListener

    使用maven搭建项目(这个错误和是不是使用maven搭建项目没有关系),然后部署到tomcat中运行. 出现问题1: tomcat跑起来了,但是启动时间很短,没有报错,项目不能正常访问 项目启动时间 ...

  3. Java Web项目(Extjs)报错五

    1. Java Web项目(Extjs)报错五 具体报错如下: usage: java org.apache.catalina.startup.Catalina [ -config {pathname ...

  4. Java Web项目(Extjs)报错四

    1.Java Web项目(Extjs)报错四 具体报错如下: usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ...

  5. Java Web项目(Extjs)报错三

    1. Java Web项目(Extjs)报错三 具体报错如下: at org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEng ...

  6. Java Web项目(Extjs)报错二

    1.Java Web项目(Extjs)报错二 具体报错如下: usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ...

  7. NetBeans部署项目(Extjs)报错(二)

    NetBeans部署项目(Extjs)报错(二) 1.具体错误如下: Using CATALINA_BASE: "C:\Users\Administrator.FOXB2MKB3RGUNIL ...

  8. NetBeans部署项目(Extjs)报错(一)

    NetBeans部署项目(Extjs)报错(一) 1.用NetBeans将项目部署到Tomcat中,报错. 具体如下: ant -f D:\\NetBeans\\workspace\\Foundati ...

  9. Java Web项目(Extjs)报错九

    1.Java Web项目(Extjs)报错九 具体报错如下: 三月 26, 2014 11:48:35 下午 org.hibernate.util.JDBCExceptionReporter logE ...

随机推荐

  1. Sql Server中的标识列(自增长字段)

    一.标识列的定义以及特点 SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点: 1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由 ...

  2. Express 中配置使用 art-template模板引擎

    art-template 官网 https://aui.github.io/art-template/ 安装: npm install --save art-template npm install ...

  3. nodejs 模板引擎

    自制替换模板 template.js var fs = require('fs') var http = require('http') var server = http.createServer( ...

  4. Codeforces 1192B 全dfs序 + 线段树

    题意:给你一颗树,每次会修改一条边的边权,问修改之后的树的直径是多少? 思路:来源于:https://www.cnblogs.com/TinyWong/p/11260601.html 得到树的全序df ...

  5. [Tyvj1423]GF和猫咪的玩具(最短路)

    [Tyvj1423]GF和猫咪的玩具 题目描述 GF同学和猫咪得到了一个特别的玩具,这个玩具由n个金属环(编号为1---n),和m条绳索组成,每条绳索连接两个不同的金属环,并且长度相同.GF左手拿起金 ...

  6. 【LeetCode】哈希表 hash_table(共88题)

    [1]Two Sum (2018年11月9日,k-sum专题,算法群衍生题) 给了一个数组 nums, 和一个 target 数字,要求返回一个下标的 pair, 使得这两个元素相加等于 target ...

  7. image按钮新增的width属性和height属性

    代码实例: test.html <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  8. CSS3 Animations

    CSS Animations 是CSS的一个模块,它定义了如何用关键帧来随时间推移对CSS属性的值进行动画处理.关键帧动画的行为可以通过指定它们的持续时间,它们的重复次数以及它们如何重复来控制. an ...

  9. thinkphp 响应对象response

    1.可以通过修改配置文件的 default_return_type修改输出类型 // 默认输出类型 'default_return_type' => 'html', 2. 可以通过Config类 ...

  10. HttpClientUtil工具类封装

    package com.jd.ng.shiro.utils; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; ...