目标:我正在尝试从java cleint向kafka发送消息
这真是一种痛苦..
让我简单介绍一下。
现在,我想编写java代码来向主题发送消息。 我使用网站快速入门的例子:
Properties props = new Properties();
props.put("zk.connect", "http://XX.XX.XX.XX:2181"); // where X is the ip
props.put("serializer.class", "kafka.serializer.StringEncoder");
producer = new Producer<String, String>(new ProducerConfig(props));
它在第四行失败,但有以下例外:
kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries
和
rg.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeout: 400
问题。
例外。
不好的参数:
在kafka快速入门示例中,我看到它只需要zk.connect, serializer.class.,当我运行它时,它会在Producer的构造函数中需要metadata.broker.list。
可以?所以我觉得kafka服务器的ip和端口
和btw - 是zk.connect还是zookeeper连接?ZkTimeoutException:无法在超时内连接到zookeeper服务器:400
maven bad versions
我去了网站,我看到最新版本是kafka_2.8.0-0.8.0
问题1 - 我使用intelij下载它(我认为它是maven central) -
我得到所有相关的罐子 - 只有卡夫卡罐子是空的(仅包含清单)。
问题2 - 有更新版本,然后是网站中的版本。他们是官方的。
无论如何,我下载了org.apache.kafka:kafka_2.10:0.8.0
使用wireshark我看到三个SYN&amp; ACK(三次握手)和然后FYN&amp; ACK
之后。在动物园管理员的日志中,我看到以下内容
[2014-02-27 01:43:42,127]警告EndOfStreamException:无法从客户端sessionid 0x0读取其他数据,可能客户端已关闭套接字
(org.apache.zookeeper.server.NIOServerCnxn)
这意味着我关闭了连接。为什么?
答案 0 :(得分:2)
Kafka 0.8不需要zk.connect
参数。你可能跟着0.7 quickstart dodumentation。检查您正在使用的版本,即使您使用DONT
属性中zk.connect
需要“http”的旧0.7版本。将其删除为"xx.xxx.xx.xx:9092"
... ...应该只是
props.put(“zk.connect”, “127.0.0.1:2181”);
对于0.8跟随this链接,生成器在这两个不同版本中的工作方式几乎没有变化。 如果您是Kafka的新手,那么您应该使用最新版本,因为那里有很多修复
答案 1 :(得分:1)
在我的情况下,我试图在云端服务中连接到HDP 2.2 Sandbox VM和Azure CentOS 6.6虚拟机上托管的代理,但无法连接。
我在Mac上运行了一个简单的Java示例(类似于问题中发布的代码段)。
最终对我有用的是将以下参数添加到./kafka/config/server.properties中:
advertised.host.name advertised.port
对于Azure,我必须指定云服务名称,例如:
advertised.host.name = my-cloud-service.cloudapp.net advertised.port = 6667
此外,对于Azure,我必须确保端口6667作为端点打开。
一旦我配置了这些,我就可以从我的工作站运行我的Java代码,并查看在VM上运行的消费者进程的输出。
让我得出这个结论的是以下网址:
https://cwiki.apache.org/confluence/display/KAFKA/FAQ
看看:为什么我的消费者/生产者不能连接到经纪人?