java - Kafka 产生多值消息

标签 java apache-kafka

我刚开始使用 Kafka

我可以发送包含多个值的消息吗?即,我这里有这个示例,它生成一 strip 有随机数的消息,但是我想为每个生成的记录添加一个时间戳。执行此操作的标准方法是什么?

    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();
    }

最佳答案

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() 中看到。

关于java - Kafka 产生多值消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50440376/

相关文章:

java - 限制在Android移动模拟器上运行Android应用程序

java - 什么是动态方法分派(dispatch),它与继承有什么关系?

java - Java 中的按位左移产生相同的值......?

java - 在Java中哪里设置参数min.insync.replicas和ack?

node.js - 在 Heroku 上找不到 librdkafka

apache-kafka - 无效状态存储异常 : the state store is not open in Kafka streams

encryption - Kafka 代理的加密 keystore /trustedstore 密码

hadoop - Storm : storm-hdfs hdfs blolt failing after 24hrs

java - 如何将jsp View 中的复杂结构映射到spring MVC中的模型对象

java - Android Cursor NPE dumpCursorToString 返回值