kafka 发送文件二进制流及使用header发送附属信息

文章目录

背景

需要使用kafka发送文件二进制以及附属信息

案例

发送方

java 复制代码
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;

import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Properties;

public class SendFileToKafka {

    public static void main(String[] args) {

        String filePath = "com/example/kafka/file/ConsumerFileByteArrayFromKafka.java";

        Properties kafkaProps = new Properties();
        kafkaProps.put("bootstrap.servers", "192.168.56.112:9092");
        kafkaProps.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        kafkaProps.put("value.serializer", "org.apache.kafka.common.serialization.ByteArraySerializer");
        KafkaProducer<String, byte[]> producer = new KafkaProducer<>(kafkaProps);
        InputStream in = SendFileToKafka.class.getResourceAsStream("/com/example/kafka/file/ConsumerFileByteArrayFromKafka.java");
        try {
            byte[] buffer = new byte[in.available()];
            // 读到buffer字节数组中
            in.read(buffer);
            ProducerRecord<String, byte[]> record = new ProducerRecord<>("dataTopic", buffer);
            String header = "aaa";
            record.headers().add("test_header", header.getBytes(StandardCharsets.UTF_8));
            producer.send(record);
            in.close();
            producer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

接收方

java 复制代码
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.header.Header;
import org.apache.kafka.common.header.Headers;

import java.util.Arrays;
import java.util.Properties;

public class ConsumerFileByteArrayFromKafka {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("bootstrap.servers", "192.168.56.112:9092");
        props.put("group.id", "group1");
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer", "org.apache.kafka.common.serialization.ByteArrayDeserializer");

        KafkaConsumer<String, byte[]> consumer = new KafkaConsumer<>(props);
        consumer.subscribe(Arrays.asList("dataTopic"));
        try {
            while (true) {
                ConsumerRecords<String, byte[]> records = consumer.poll(100);
                for (ConsumerRecord<String, byte[]> record : records) {
                    Headers headers = record.headers();
                    Iterable<Header> testHeader = headers.headers("test_header");
                    for (Header header : testHeader) {
                        String recordHeader = new String(header.value(), "UTF-8");
                        System.out.println("recordHeader => " + recordHeader);
                    }
                    byte[] message = record.value();
                    System.out.println(new String(message));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            consumer.close();
        }
    }
}
相关推荐
大菠萝爱上小西瓜5 小时前
【大数据实战】Spark 2.2.2 完全分布式集群搭建
大数据·分布式·spark
肠畔码农5 小时前
深度解析 RocketMQ 消费端限流与重平衡(Rebalance):分布式队列分配与流控防雪崩本质
分布式·rocketmq
海兰6 小时前
【 Kafka进阶3】Apache Kafka 分布式事件流平台:架构原理与微服务解耦机制简要分析
分布式·架构·kafka
小白一枚136 小时前
[学习笔记]Kafka 篇:从原理到实战的一站式指南
大数据·运维·elk·kafka·个人开发
阿里云云原生21 小时前
还在给 AI “喂冷饭”?8.28 上海沙龙:带你跨越 AI 实时上下文鸿沟
云原生·kafka
麻瓜记录Jackson1 天前
深入剖析 ZooKeeper 分布式 互斥锁:Curator 之 InterProcessMutex 源码全解(附图解)
java·spring boot·分布式·后端·zookeeper·java-zookeeper
Keystone_Onion1 天前
跨境电商架构演进:基于美国海外仓的中大件分布式仓网路由优化方案
分布式·架构
盛世宏博智慧档案1 天前
分布式机房环境监测硬件,以太网温湿度采集终端如何应用
分布式·传感器·机房·温湿度
海兰1 天前
【Kafka学习4】六大核心 API
学习·kafka·linq
NJCloud1 天前
ELK企业级日志分析平台(四)——基于 ELFK + Kafka 的日志采集与传输平台部署实践
linux·运维·分布式·elk·kafka