在kafka中生成消息时,我收到以下错误:
$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic nil_PF1_P1
hi
hello
[2016-07-19 17:06:34,542] ERROR Error when sending message to topic nil_PF1_P1 with key: null, value: 2 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
[2016-07-19 17:07:34,544] ERROR Error when sending message to topic nil_PF1_P1 with key: null, value: 5 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
$ bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic nil_PF1_P1
Topic:nil_PF1_P1 PartitionCount:1 ReplicationFactor:1 Configs:
Topic: nil_PF1_P1 Partition: 0 Leader: 2 Replicas: 2 Isr: 2
对此有何看法?
答案 0 :(得分:12)
而不是更改server.properties包括代码本身中的0.0.0.0。这解决了我的问题。
而不是
CIImage
使用:
// Must use self.scale, to disambiguate from the scale parameter
let floatScale = CGFloat(self.scale)
let pixelSize = CGSize(width: size.width * floatScale, height: size.height * floatScale)
let cropRect = CGRect(origin: CGPoint.zero, size: pixelSize)
guard let output = filter.outputImage?.cropping(to: cropRect) else { return nil }
答案 1 :(得分:11)
可能是因为来自kafka server.properties文件的一些参数。
以下解决方案为我工作。您可以找到更多信息here
1)停止kakfka服务器。
$ cd $ KAFKA_HOME / bin
$ ./kafka-server-stop.sh
2)改变了
listeners = PLAINTEXT:// hostname:9092
到
listeners = PLAINTEXT://0.0.0.0:9092
来自
$ KAFKA_HOME / config / server.properties`
文件。
3)重启kafka服务器。
$ KAFKA_HOME / bin / kafka-server-start.sh /kafka/config/server.properties
答案 2 :(得分:8)
我知道这已经过时了,但这可能适用于正在处理它的其他人:
我改变了两件事:
1.将“bootstrap.servers”属性或 - broker-list 选项更改为 0.0.0.0:9092
2.更改(在我的情况下取消注释和编辑)2个属性中的server.properties
答案 3 :(得分:8)
如果您正在运行 hortonworks 群集,请检查ambari中的侦听端口。
在我的情况下 9092不是我的端口。我去了ambari,发现监听端口设置为6667 它对我有用。的:)强>
答案 4 :(得分:3)
我今天在confluent_kafka 0.9.2 (0x90200)
和librdkafka 0.9.2 (0x90401)
时遇到了同样的错误。就我而言,我在tutorialpoints示例中指定了错误的代理端口:
$ kafka-console-producer.sh --broker-list localhost:9092 --topic tutorialpoint-basic-ops-01
虽然我的经纪人是在端口 9094 :
上启动的$ cat server-02.properties
broker.id=2
port=9094
log.dirs=/tmp/kafka-example-logs-02
zookeeper.connect=localhost:2181
虽然 9092 端口未打开(netstat -tunap
),但kafka-console-producer.sh
花了60秒才引发错误。看起来这个工具需要修复:
答案 5 :(得分:3)
我遇到了类似的问题,我可以在localhost
上制作和使用,但不能在网络上的不同机器上制作和使用。基于几个答案我得到了线索,基本上我们需要向生产者和消费者公开advertised.listener
,但是给0.0.0.0也没有用。所以给出了advertised.listeners
advertised.listeners=PLAINTEXT://HOST.IP:9092
我原样离开了listener=PLAINTEXT://:9092
。
因此,火花将广告的ip和端口暴露给生产者和消费者
答案 6 :(得分:2)
有这个问题: 使用Hortonworks HDP 2.5。 启用Kerberisation
通过提供正确的安全协议和端口来解决。 示例命令:
./kafka-console-producer.sh --broker-list sand01.intranet:6667, san02.intranet:6667, san03.intranet:6667--topic test--security-protocol PLAINTEXTSASL
./kafka-console-consumer.sh --zookeeper sand01:2181 --topic test--from-beginning --security-protocol PLAINTEXTSASL
答案 7 :(得分:2)
就我而言,我正在使用带有Openshift的Kafka docker。我遇到了同样的问题。当我传递值为KAFKA_LISTENERS
的环境变量PLAINTEXT://:9092
时,它得到了修复。这最终将在 server.properties 下添加创建条目listeners=PLAINTEXT://:9092
。
听众不必拥有主机名。
答案 8 :(得分:2)
我遇到了上面的异常堆栈跟踪。我调查并找到了根本原因。当我建立具有两个节点的Kafka集群时,我遇到了它。在server.properties中进行了以下设置。这里我将kafka节点1和2的server.properties表示为broker1.properties和broker2.properties
broker1.properties设置
listeners=PLAINTEXT://A.B.C.D:9092
zookeeper.connect=A.B.C.D:2181,E.F.G.H:2181
broker2.properties设置
listeners=PLAINTEXT://E.F.G.H:9092
zookeeper.connect=A.B.C.D:2181,E.F.G.H:2181
我试图使用以下命令从node1或node2启动生产者: ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic OUR_TOPIC 虽然Kafka在两台机器上运行,但我得到了上述超时异常堆栈跟踪。
虽然制作人是从Leader节点或者跟随者开始的,但我总是这样做。
当使用来自任何经纪人的以下命令时,我能够获得制作者的消息。
./bin/kafka-console-producer.sh --broker-list A.B.C.D:9092 --topic OUR_TOPIC
or
./bin/kafka-console-producer.sh --broker-list E.F.G.H:9092 --topic OUR_TOPIC
or
./bin/kafka-console-producer.sh --broker-list A.B.C.D:9092,E.F.G.H:9092 --topic OUR_TOPIC
因此,根本原因是Kafka代理在内部使用侦听器= PLAINTEXT:// EFGH:9092属性同时启动生产者。此属性必须匹配才能在启动生产者时从任何节点启动kafka代理。转换此属性to listeners = PLAINTEXT:// localhost:9092将适用于我们的第一个命令。
答案 9 :(得分:2)
另一种情况。直到我找到带有以下消息的kafka日志时才知道发生了什么:
Caused by: java.lang.IllegalArgumentException: Invalid version for API key 3: 2
显然,生产者使用的是比kafka服务器更新的kafka-client(java),并且使用的API无效(客户端使用1.1和10.0上的服务器)。在客户/制片人上我得到了:
Error producing to topic Failed to update metadata after 60000 ms.
答案 10 :(得分:2)
对于Apache Kafka v2.11-1.1.0
启动Zookeeper服务器:
$ bin/zookeeper-server-start.sh config/zookeeper.properties
启动kafka服务器:
$ bin/kafka-server-start.sh config/server.properties
创建一个主题名称“ my_topic”:
$ bin/kafka-topics.sh --create --topic my_topic --zookeeper localhost:2181 --replication-factor 1 --partitions 1
启动制作人:
$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my_topic
启动消费者:
$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic my_topic --from-beginning
答案 11 :(得分:1)
在主题之后添加这样的一行有助于解决同一问题: ... --topic XXX -属性“ parse.key = true” –属性“ key.separator =:”
希望这对某人有帮助。
答案 12 :(得分:0)
我在Hortonworks(HDP 2.X发行版)安装上使用Apache Kafka。遇到错误消息意味着Kafka生产者无法将数据推送到段日志文件。在命令行控制台中,这意味着两件事:
如果通过scala api编写时遇到错误消息,请另外使用telnet <cluster-host> <broker-port>
检查与kafka群集的连接
注意::如果您使用scala api创建主题,则代理需要一些时间来了解新创建的主题。因此,创建主题后,制作人可能会立即失败并显示错误Failed to update metadata after 60000 ms.
为了解决此问题,我进行了以下检查:
我通过Ambari检查后的第一个区别是,Kafka经纪人在HDP 2.x上的端口6667
上监听(Apache Kafka使用9092)。
listeners=PLAINTEXT://localhost:6667
接下来,使用ip代替localhost。
我执行了netstat -na | grep 6667
tcp 0 0 192.30.1.5:6667 0.0.0.0:* LISTEN
tcp 1 0 192.30.1.5:52242 192.30.1.5:6667 CLOSE_WAIT
tcp 0 0 192.30.1.5:54454 192.30.1.5:6667 TIME_WAIT
因此,我将生产者调用修改为用户IP,而不是localhost:
./kafka-console-producer.sh --broker-list 192.30.1.5:6667 --topic rdl_test_2
要监视是否有新记录要写入,请监视/kafka-logs
文件夹。
cd /kafka-logs/<topic name>/
ls -lart
-rw-r--r--. 1 kafka hadoop 0 Feb 10 07:24 00000000000000000000.log
-rw-r--r--. 1 kafka hadoop 10485756 Feb 10 07:24 00000000000000000000.timeindex
-rw-r--r--. 1 kafka hadoop 10485760 Feb 10 07:24 00000000000000000000.index
一旦生产者成功写入,段日志文件00000000000000000000.log
的大小就会增加。
请参见以下尺寸:
-rw-r--r--. 1 kafka hadoop 10485760 Feb 10 07:24 00000000000000000000.index
-rw-r--r--. 1 kafka hadoop **45** Feb 10 09:16 00000000000000000000.log
-rw-r--r--. 1 kafka hadoop 10485756 Feb 10 07:24 00000000000000000000.timeindex
此时,您可以运行consumer-console.sh:
./kafka-console-consumer.sh --bootstrap-server 192.30.1.5:6667 --topic rdl_test_2 --from-beginning
response is hello world
在此步骤之后,如果您想通过Scala API生成消息,则更改listeners
值(从localhost到公共IP)并通过Ambari重新启动Kafka代理:
listeners=PLAINTEXT://192.30.1.5:6667
样本制作者如下:
package com.scalakafka.sample
import java.util.Properties
import java.util.concurrent.TimeUnit
import org.apache.kafka.clients.producer.{ProducerRecord, KafkaProducer}
import org.apache.kafka.common.serialization.{StringSerializer, StringDeserializer}
class SampleKafkaProducer {
case class KafkaProducerConfigs(brokerList: String = "192.30.1.5:6667") {
val properties = new Properties()
val batchsize :java.lang.Integer = 1
properties.put("bootstrap.servers", brokerList)
properties.put("key.serializer", classOf[StringSerializer])
properties.put("value.serializer", classOf[StringSerializer])
// properties.put("serializer.class", classOf[StringDeserializer])
properties.put("batch.size", batchsize)
// properties.put("linger.ms", 1)
// properties.put("buffer.memory", 33554432)
}
val producer = new KafkaProducer[String, String](KafkaProducerConfigs().properties)
def produce(topic: String, messages: Iterable[String]): Unit = {
messages.foreach { m =>
println(s"Sending $topic and message is $m")
val result = producer.send(new ProducerRecord(topic, m)).get()
println(s"the write status is ${result}")
}
producer.flush()
producer.close(10L, TimeUnit.MILLISECONDS)
}
}
希望这对某人有帮助。