启动多个Kafka经纪人失败

时间:2016-06-28 01:04:05

标签: apache-kafka

尝试使用不同的brokerId启动多个Kafka经纪人。一个是默认server.properties,另一个是serverTest.properties,其中有两行更改,即broker.id=1listeners=PLAINTEXT://localhost:6000。其余的是默认设置。我首先启动zookeeper,然后启动默认的kafka server.properties,然后启动serverTest.properties时出现以下异常:kafka.common.InconsistentBrokerIdException: Configured brokerId 1 doesn't match stored brokerId 0 in meta.properties。我的理解是,上面的内容实际上应该启动多个节点,正如我在教程中看到的那样。我正在使用Kafka 9.0。

6 个答案:

答案 0 :(得分:10)

编辑config / serverTest.properties并替换现有的配置值,如下所示:

broker.id=2
port=9093
log.dir=/tmp/kafka-logs-2

如果你想要第三个经纪人:

cp config/server.properties config/server3.properties

编辑config / server3.properties并替换现有的配置值,如下所示:

broker.id=3
port=9094
log.dir=/tmp/kafka-logs-3

如果您在不同的机器上运行,则必须更改

advertised.host.name=192.168.x.x

否则,如果您在同一个vmware机器上运行,例如,您应该只更改端口和log.dir,如上所述

答案 1 :(得分:7)

而且,根据经验,不要忘记编辑kafka-logs - * / meta.properties文件中的broker.id条目以匹配您的更改(或删除文件并让kafka重新生成它们)。

答案 2 :(得分:5)

这是一个老问题,这个答案仍然可以帮助别人。问题是当您从现有的server.properties创建新的server.properties时,下面的行将被复制:

# A comma separated list of directories under which to store log files
log.dirs=/tmp/kafka-logs

因此,即使是新的代理也尝试使用相同的日志目录,因此它使用kafka-logs的meta.properties,它由代理0创建,代理ID为0。

因此,转到/ tmp并删除所有kafka-logs *文件,然后发表评论log.dirs=/tmp/kafka-logs 然后添加你添加的行:)

答案 3 :(得分:2)

请确保您的server.propertiesserverTest.properties中有不同的log.dirs

如果您必须进行任何log.dirs更改,请不要忘记删除PC上存储的先前文件夹

答案 4 :(得分:1)

答案是完美的,但花了我一段时间才弄清楚它才能起作用。我想分享我的错误,希望其他人可以避免。

我在这里遵循了有关kafka的官方教程:

https://kafka.apache.org/quickstart#quickstart_multibroker

并按照指南中的建议进行文件复制:

cp config/server.properties config/server-1.properties

我使用vim打开文件。我搜索 broker.id 并替换为以下内容(假设存在不存在的 listeners log.dirs ,这是错误的),如下所示


# config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=/tmp/kafka-logs-1

我从

开始了新的经纪人
 >  bin/kafka-server-start.sh config/server-1.properties

崩溃了!这是我的调试方式:

我去了 / tmp 并检查了目录 kafka-logs-1 没有出现。我意识到配置中的log.dir应该有问题。我在config / server-1.properties中再次检查了它。我发现有两行log.dirs。

#copy from the tutorial
log.dirs=/tmp/kafka-logs-1


# default one
log.dirs=/tmp/kafka-logs

当然,最后一个覆盖第一个,因此使新经纪人指向id = 0的第一个经纪人。

删除最后一个log.dirs后,仅保留一个log.dirs( log.dirs = / tmp / kafka-logs-1 )就像一个超级按钮。

答案 5 :(得分:0)

确保每个节点/经纪人的日志目录经纪人ID 端口不同。

示例配置( server.properties ):

经纪人1

var presidents = [{
            "id": 1,
            "president": 1,
            "nm": "George Washington",
            "pp": "None, Federalist",
            "tm": "1789-1797"
        }];
 
var newPresidents = presidents.map(mapPresidents);
console.log(newPresidents)

 
 function mapPresidents(oldPresident) {

            let namesInArray = oldPresident.nm;
            const nameParts = namesInArray.split(/ (.+)/); // incase of president having middle initial
            const yearsInOfficeArr = oldPresident.tm.split('-').map(year => +year) //Separate years and parse it into numbers
            const yearsInOffice = yearsInOfficeArr[1] - yearsInOfficeArr[0] || yearsInOfficeArr[0]
        var newPresident = {
                id: oldPresident.id,
                number: oldPresident.president,
                firstName: nameParts[0],
                lastName: nameParts[1],   
                party: oldPresident.pp,
                yearsInOffice: yearsInOffice
            };

            return newPresident;

        };

经纪人2

broker.id=1
listeners=PLAINTEXT://:9092
log.dirs=/tmp/kafka-1-logs

经纪人3

broker.id=2
listeners=PLAINTEXT://:9093
log.dirs=/tmp/kafka-2-logs

希望这会有所帮助。祝您黑客愉快!