【发布时间】:2021-03-29 12:33:31
【问题描述】:
我有这个非常简单的代码,它应该只是使用来自the official GitHub 的本地主机中的 Kafka 将简单的消息从生产者传输到消费者
const { Kafka } = require('kafkajs')
const kafka = new Kafka({
clientId: 'my-app',
brokers: ['kafka1:9092', 'kafka2:9092']
})
const producer = kafka.producer()
const consumer = kafka.consumer({ groupId: 'test-group' })
const run = async () => {
// Producing
await producer.connect()
await producer.send({
topic: 'test-topic',
messages: [
{ value: 'Hello KafkaJS user!' },
],
})
// Consuming
await consumer.connect()
await consumer.subscribe({ topic: 'test-topic', fromBeginning: true })
await consumer.run({
eachMessage: async ({ topic, partition, message }) => {
console.log({
partition,
offset: message.offset,
value: message.value.toString(),
})
},
})
}
run().catch(console.error)
当我使用node index.js(就是这个文件)执行这段代码时,我得到了很多这两个错误:
{"level":"ERROR","timestamp":"2021-03-29T12:01:00.633Z","logger":"kafkajs","message":"[Connection] Connection error: getaddrinfo ENOTFOUND kafka1","broker":"kafka1:9092","clientId":"my-app","stack":"Error: getaddrinfo ENOTFOUND kafka1\n at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:60:26)"}
{"level":"ERROR","timestamp":"2021-03-29T12:01:00.635Z","logger":"kafkajs","message":"[BrokerPool] Failed to connect to seed broker, trying another broker from the list: Connection error: getaddrinfo ENOTFOUND kafka1","retryCount":0,"retryTime":323}
所以看起来我猜在本地端口 9092 上定义代理的第一行不起作用?但我不知道如何纠正这一点。你能帮帮我吗?
【问题讨论】:
-
kafka1:9092', 'kafka2:9092是两个远程服务器,不是本地端口 -
所以看起来我正在尝试使用不存在的 foo-server ?我没有在我的计算机上进行任何配置(我是新手),所以我的本地服务器可能丢失或无法正常工作?我已经安装了 zookeeper 用户 apt,但仅此而已。
-
自述文件中给出的示例是为了表明 brokers 参数是一个数组,而不是一个字符串。您肯定还需要安装和运行 Kafka。而如果在本地做,需要在代码中给出合适的localhost地址
-
好吧,如果你不介意的话,我发现很难找到关于如何部署本地 kafka 服务器的更新资源?我在一些黑暗的开发博客上看到了很多使用不推荐使用的东西的方法^^'你有一个可以参考吗?请做我的本地测试?非常感谢!
-
Kafka 官网正好展示了你所需要的东西
标签: javascript apache-kafka kafkajs