如何仅打印kafka记录值,而不是所有其他数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何仅打印kafka记录值,而不是所有其他数据?相关的知识,希望对你有一定的参考价值。

所以我是kafka的新手,我一直在关注一些教程并在Internet上搜索,因此我设法用Java设置了生产者和使用者脚本。但是,不仅仅是打印消息(值),我在eclipse控制台中得到以下结果:

ConsumerRecord(topic = MyTopic, partition = 0, leaderEpoch = 0, offset = 131, CreateTime = 1579178094212, serialized key size = 10, serialized value size = 31, headers = RecordHeaders(headers = [], isReadOnly = false), key = Simple Key, value = Custom test message)

相反,如果我在Windows控制台中运行使用者,则只会得到该值,这意味着我会收到“自定义测试消息”。

如何在Eclipse控制台上从kafka使用者记录中选择并仅打印“ value”属性?或与此相关的任何其他财产。

编辑

对于询问我如何打印所有数据的人,这是我的使用者脚本中的代码:

    package com.okta.javakafka.kafkajava;

    import java.util.Arrays;

    import java.util.Properties;
    import java.util.UUID;

    import org.apache.kafka.clients.consumer.ConsumerConfig;

    import org.apache.kafka.clients.consumer.ConsumerRecord;
    import org.apache.kafka.clients.consumer.ConsumerRecords;
    import org.apache.kafka.clients.consumer.KafkaConsumer;



    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    public class SimpleConsumer 


        public static void main(String[] args) throws ClassNotFoundException
            ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) org.slf4j.LoggerFactory.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
            root.setLevel(ch.qos.logback.classic.Level.INFO);
            Properties props = new Properties();
            props.put("bootstrap.servers", "localhost:9092");
            props.put("group.id","test");
            props.put("enable.auto.commit","true");
            props.put("auto.commit.interval.ms","1000");
            props.put(ConsumerConfig.GROUP_ID_CONFIG, UUID.randomUUID().toString());
            props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
    props.put("key.deserializer",Class.forName("org.apache.kafka.common.serialization.StringDeserializer"));
            props.put("value.deserializer", Class.forName("org.apache.kafka.common.serialization.StringDeserializer"));

            KafkaConsumer<String,String> consumer = new KafkaConsumer<String,String>(props);
            consumer.subscribe(Arrays.asList("MyTopic"));

            try 
                while(true) 
                    ConsumerRecords<String,String> records = consumer.poll(1000);
                    for(ConsumerRecord<String,String> record : records)
                    System.out.println(record.toString());

                

            finally 
                consumer.close();
            
        

    
答案

您执行System.out.println(record.toString());。绝对是关于整个ConsumerRecord

仅打印您需要执行的值:

System.out.println(record.value());

以上是关于如何仅打印kafka记录值,而不是所有其他数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据其他记录的处理结果在Kafka中处理记录?

使用 PL SQL 将所有列值打印到仅记录

如何获取数据列表,特定日期仅从每个日期获取 6 条记录而不是更多

Excel VBA函数仅粘贴打印区域内的内容而不是整个工作表?

如何从 XML 中仅提取标签名称(而不是值),最终使用 XPath

Django ORM:如何根据所有记录中的列获取唯一记录(需要模型对象而不是特定值对象)