kafka生产者能正常发送消息但消费者轮询到的消息为empty,java代码

public class ProducerDemo {

	
	// Topic
    private static final String topic = "kafkaTopic";

    public static void main(String[] args) throws Exception {

        Properties props = new Properties();
        props.put("bootstrap.servers", "192.168.174.127:9092");
        props.put("acks", "0");
        props.put("group.id", "1111");
        props.put("retries", "0");
         //设置key和value序列化方式
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        //生产者实例
        KafkaProducer<String, String> producer = new KafkaProducer<String, String>(props);

        int i = 1;

        // 发送业务消息
        // 读取文件 读取内存数据库 读socket端口
        while (true) {
            Thread.sleep(1000);
            producer.send(new ProducerRecord<String, String>(topic, "key:" + i, "value:" + i));
            System.out.println("key:" + i + " " + "value:" + i);
            i++;
        }
    }



}

 

public class ConsumerDemo {

	private static final Logger logger = LoggerFactory.getLogger(ConsumerDemo.class);
    private static final String topic = "kafkaTopic";

    public static void main(String[] args) {

        Properties props = new Properties();
        props.put("bootstrap.servers", "192.168.174.127:9092");//单节点,kafka多节点时候使用,逗号隔开
        props.put("group.id", "1111"); //定义消费组
        props.put("enable.auto.commit", "true");
        props.put("auto.commit.interval.ms", "1000");
        props.put("auto.offset.reset", "earliest");
       
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

        KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);

        consumer.subscribe(Arrays.asList(topic));//订阅主题
//        consumer.subscribe(topic);//订阅主题

        while (true) {
//            ConsumerRecords<String, String> records = consumer.poll(1000);
            ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000));
//            Map<String, ConsumerRecords<String, String>> poll = consumer.poll(1000);
//            System.out.println("JSON.toJSONString(poll) = " + JSON.toJSONString(poll));
            for (ConsumerRecord<String, String> record : records) {
                System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
            }
        }
    }


}

 

kafka服务器版本:kafka_2.12-2.3.0.tgz

java API kafka客户端版本:

    <dependency>
      <groupId>org.apache.kafka</groupId>
      <artifactId>kafka-clients</artifactId>
      <version>2.3.0</version>
    </dependency>

大神们帮忙看看!

你可以使用 Apache Kafka 提供的 Java 客户端来创建一个 Kafka 生产者发送消息。以下是一个简单的示例代码: ```java import org.apache.kafka.clients.producer.Producer; import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.clients.producer.KafkaProducer; import java.util.Properties; public class KafkaProducerExample { public static void main(String[] args) { // 配置 Kafka 生产者的属性 Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); // Kafka 服务器地址和端口 props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); // 键的序列化器 props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); // 值的序列化器 // 创建 Kafka 生产者 Producer<String, String> producer = new KafkaProducer<>(props); // 发送消息 String topic = "your_topic_name"; // 替换为你的主题名称 String key = "your_key"; // 替换为你的消息键 String value = "your_message"; // 替换为你的消息内容 ProducerRecord<String, String> record = new ProducerRecord<>(topic, key, value); producer.send(record); // 关闭 Kafka 生产者 producer.close(); } } ``` 以上代码会将一条消息发送到指定的 Kafka 主题。你需要将 `bootstrap.servers` 属性设置为你的 Kafka 服务器地址和端口,将 `topic`、`key` 和 `value` 设置为你想要发送消息的相关信息。 请注意,这只是一个简单的示例,你可以根据自己的需求进行更复杂的配置和处理。同时,你需要确保你的 Java 项目中包含了 Kafka 客户端的依赖。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值