Java 卡夫卡制作人课上的虫子
我对卡夫卡很陌生,开始研究生产者-消费者模型。Java 卡夫卡制作人课上的虫子,java,apache-kafka,kafka-producer-api,Java,Apache Kafka,Kafka Producer Api,我对卡夫卡很陌生,开始研究生产者-消费者模型。 我为Kafka producer编写了一个程序,它将从MySQL读取一个表,我正在命令提示符下读取这些消息。 问题是我只能看到表中最后一列的数据 MySQL表结构和数据: +----------+---------+----------------+ | dept | empName | salary(double) | +----------+---------+----------------+ | Engg | Fred
我为Kafka producer编写了一个程序,它将从MySQL读取一个表,我正在命令提示符下读取这些消息。
问题是我只能看到表中最后一列的数据 MySQL表结构和数据:
+----------+---------+----------------+
| dept | empName | salary(double) |
+----------+---------+----------------+
| Engg | Fred | 2000 |
| Engg | Bob | 3000 |
| Engg | Joe | 1000 |
| Arts | Jack | 5000 |
| Commerce | Jill | 2400 |
| Arts | James | 3000 |
| Commerce | Rob | 8700 |
+----------+---------+----------------+
卡夫卡制作人班:
package com.kafka.producer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;
@SuppressWarnings("deprecation")
public class KafkaMySqlProducer {
public static void main(String[] args) {
Connection con;
PreparedStatement pstmnt;
ResultSet rs;
Properties props = new Properties();
props.put("zk.connect", "localhost:2181");
props.put("serializer.class","kafka.serializer.StringEncoder");
props.put("metadata.broker.list","localhost:9092");
ProducerConfig config = new ProducerConfig(props);
Producer producer = new Producer(config);
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","cloudera");
pstmnt = con.prepareStatement("select * from department");
rs = pstmnt.executeQuery();
while(rs.next()) {
String name = rs.getString(1);
String department = rs.getString(2);
String salary = " " + rs.getDouble(3);
producer.send(new KeyedMessage("dbrec", name, department, salary));
}
con.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
我的消费者的输出:
[cloudera@quickstart kafka_2.11-0.10.2.0]$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic dbrec --from-beginning
[2017-06-18 10:23:22,428] WARN Error while fetching metadata with correlation id 2 : {dbrec=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
[2017-06-18 10:23:22,628] WARN The following subscribed topics are not assigned to any members in the group console-consumer-33197 : [dbrec] (org.apache.kafka.clients.consumer.internals.ConsumerCoordinator)
2000.0
3000.0
1000.0
5000.0
2400.0
3000.0
8700.0
我只是从表的最后一列获取数据。谁能告诉我我在这里犯了什么错误吗?带有4个参数的
KeyedMessage
构造函数的最后一个参数是实际的消息
这个类不仅仅接受所有值的列表
具体来说,您提供的参数是
(主题、键、部件键、消息)
。您只使用主题中的消息
带有4个参数的KeyedMessage
构造函数的最后一个参数是实际消息
这个类不仅仅接受所有值的列表
具体来说,您提供的参数是(主题、键、部件键、消息)
。您只使用主题中的消息
OK。。像这样纠正它。send(新的KeyedMessage(“dbrec”,name+“”+department+“”+salary));我还看到了这两行不推荐使用的消息。ProducerConfig config=新的ProducerConfig(道具);生产者生产者=新生产者(配置);你能告诉我这些方法的新选项是什么,这样我就可以实现它们了。不确定,但是JavaDoc可能会为你回答这个问题。我会检查JavaDocOK。。像这样纠正它。send(新的KeyedMessage(“dbrec”,name+“”+department+“”+salary));我还看到了这两行不推荐使用的消息。ProducerConfig config=新的ProducerConfig(道具);生产者生产者=新生产者(配置);你能告诉我这些方法的新选项是什么,这样我就可以实现它们了。不确定,但是JavaDoc可能会为你回答这个问题。将检查javadoc如果您正在使用Kafka启动一个新项目,那么最好开始使用新的producer和consumer类。我看到您正在使用较旧的producer连接到Zookeeper以获取有关代理的信息,而不是直接向其中一个代理获取信息。如果您正在使用Kafka启动一个新项目,最好开始使用新的producer和consumer类。我看到您使用的是较旧的一个,producer连接到Zookeeper以获取有关经纪人的信息,而不是直接与其中一个经纪人联系。