Apache Kafka 示例错误:3 次尝试后无法发送消息 [英] Apache Kafka example error: Failed to send message after 3 tries
问题描述
我正在运行其站点中提到的这个 kafka 生产者示例
I am running this kafka producer example mentioned in its site
代码:
public class TestProducer {
public static void main(String[] args) {
long events = Long.parseLong(args[0]);
Random rnd = new Random();
Properties props = new Properties();
props.put("metadata.broker.list", "host.broker-1:9093, host.broker-2:9093, host.broker-3:9095");
props.put("serializer.class", "kafka.serializer.StringEncoder");
props.put("partitioner.class", "test.app.SimplePartitioner");
props.put("request.required.acks", "1");
ProducerConfig config = new ProducerConfig(props);
Producer<String, String> producer = new Producer<String, String>(config);
for (long nEvents = 0; nEvents < events; nEvents++) {
long runtime = new Date().getTime();
String ip = "192.168.2." + rnd.nextInt(255);
String msg = runtime + ",www.example.com," + ip;
KeyedMessage<String, String> data = new KeyedMessage<String, String>("page_visits", ip, msg);
producer.send(data);
}
producer.close();
}
}
public class SimplePartitioner implements Partitioner{
public SimplePartitioner (VerifiableProperties props) {
}
public int partition(Object key, int a_numPartitions) {
int partition = 0;
String stringKey = (String) key;
int offset = stringKey.lastIndexOf('.');
if (offset > 0) {
partition = Integer.parseInt( stringKey.substring(offset+1)) % a_numPartitions;
}
return partition;
}
}
更多详情:
我正在一个主机(调用是生产者)上运行这个应用程序,它是远程主机代理[1-3]
I am running this application on a host(call is producer) which is remote to host-broker[1-3]
我可以从生产者主机 ping 和 ssh 代理主机.
I can ping and ssh the broker host from producer host.
在server.properties中提供了advertised.host.name(它们在brokers中分别命名为server[1-3].properties
Provided the advertised.host.name in the server.properties (they are named as server[1-3].properties in the brokers respectively
属性:
broker.id=1
port=9093
host.name=host.broker.internal.name
advertised.host.name=host-broker1
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/data/1/kafka-logs-1,/data/2/kafka-logs-2
num.partitions=1
num.recovery.threads.per.data.dir=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.cleaner.enable=false
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
zookeeper.connection.timeout.ms=6000
知道如何解决这个错误吗?
Any idea on how to fix this error?
推荐答案
我在运行 Kafka 生产者时遇到这些错误:
I got these errors when running a Kafka producer:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
找到解决方案:
在我的 Mac 机器上,在我下载 scala-2.10
和 kafka_2.10-0.8.1
后,在 kafka_2.10-0.8.1 目录中,每个当我启动 zookeeper、kafka 服务器并创建测试主题时,一切都很好.然后我需要为测试主题启动一个生产者.但有一个错误:
On my Mac box, after I download the scala-2.10
and kafka_2.10-0.8.1
, in the kafka_2.10-0.8.1 directory, every thing is fine when I start zookeeper, kafka server, and create a test topic. Then I need to start a producer for the test topic. but there is an error:
yhuangMac:kafka_2.10-0.8.1 yhuang$ ./bin/kafka-console-producer.sh –broker-list localhost:9092 –topic test
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
原因是kafka libs目录下,kafka release zip文件只包含slf4j-api的jar文件,漏掉了一个jar文件:slf4j-nop.jar,所以我们要去http://www.slf4j.org,下载slf4j-1.7.7.zip
,然后解压,复制slf4j-api-1.7.7, slf4j-nop-1.7.7.jar 到 kafka 的 libs 目录.
The reason is that in the kafka libs directory, the kafka release zip file only included jar file of slf4j-api, they missed a jar file: slf4j-nop.jar, so we have to go to http://www.slf4j.org, download slf4j-1.7.7.zip
, and then unzip it, copy the slf4j-api-1.7.7, slf4j-nop-1.7.7.jar into kafka’s libs directory.
再次重启kafka producer,现在没有报错了.
Restart kafka producer again, now no error is reported.
来源:解决方案
这篇关于Apache Kafka 示例错误:3 次尝试后无法发送消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!