我不熟悉使用Kafka
。
我能发送包含多个值的邮件吗?即,我这里有一个这样的例子,它产生一个带有随机数的消息,但是我想为每个产生的记录添加一个时间戳。这样做的标准方法是什么?
while(true){
for(int key=0; key < 10000; key++){
Random rand = new Random();
int n = rand.nextInt(50) + 1;
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
Date date = new Date();
ProducerRecord<String, String> producerRecord = new ProducerRecord<String, String>("java-topic", Integer.toString(1),Integer.toString(n));
producer.send(producerRecord);
Thread.sleep(10000);
}
//producer.close();
}
答案 0 :(得分:4)
内部Kafka代理(服务器)仅存储字节数组。因此,您必须对邮件进行编码以包含所有值 一种流行的方法是在消息
中使用JSON编码int numbers[] = {1,2,3};
String msg = String.format("{\"numbers\": %s, \"timestamp\": \"%s\"}",
java.util.Arrays.toString(numbers), timestamp);
ProducerRecord<String, String> producerRecord = new ProducerRecord<String, String>(
"java-topic", msg);
注意当kafka服务器收到可在ConsumerRecord.timestamp()
中看到的消息时,会添加时间戳答案 1 :(得分:0)
感谢您的帮助!!输出答案
while(true){
for(int key=0; key < 10000; key++){
Random rand = new Random();
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
int n = rand.nextInt(50) + 1;
String today = formatter.format(date);
String msg = String.format("{\"numbers\": %s, \"timestamp\": \"%s\"}", n, today);
ProducerRecord<String, String> producerRecord = new ProducerRecord<String, String>(
"java-topic", Integer.toString(1), msg);
producer.send(producerRecord);
Thread.sleep(1000);
}
//producer.close();
}