Kafka示例一则及问题排除

在Linux上安装Zookeeper及Kafka

1.安装Zookeeper后,在其配置文件zoo.cfg中添加:

dataLogDir=******************

然后运行命令:zkServer.sh start 启动Zookeeper。

2.安装Kafka

安装Kafka后,运行命令:./bin/kafka-server-start.sh ./config/server.properties,命令启动kafka.

3.生产者代码:

首先引入Kafka的client jar包

 <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>0.11.0.1</version>
        </dependency>
public class Producer {
    // Topic
    private static final String topic = "kafkaTopic1";

    public static void aaa() {

        Properties props = new Properties();

        props.put("bootstrap.servers", "192.168.102.128:9092");
        props.put("acks", "0");
        props.put("group.id", "1111");
        props.put("retries", "0");
        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;
        // 发送消息
        while (true) {
            System.out.println("--------------生产开始:--------------");
            producer.send(new ProducerRecord<String, String>(topic, "key:" + i, "value:" + i));
            System.out.println("key:" + i + " " + "value:" + i);
            i++;
            if (i >= 10) {
                break;
            }
        }
    }
}

4.引入消费者代码:

public class Consumer {
    private static final String topic = "kafkaTopic1";

    public static void aaaa() {

        Properties props = new Properties();
        props.put("bootstrap.servers", "192.168.102.128:9092");
        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));

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

5.运行:

运行生产者代码,将数据推入kafka,然后运行消费者代码,发现系统运行到:

ConsumerRecords<String, String> records = consumer.poll(1000);

系统卡住不动,后台报错:

Marking the coordinator linux-kafka:9092 (id: 2147483647 rack: null) dead for group 1111

经过网上查询,发现是Kafka配置文件中没有配置监听端口所致,在配置文件中添加:

listeners=PLAINTEXT://IP:9092

保存后,重启Kafka及生产者、消费者代码,一切正常,消费端运行结果如下:

原文地址:https://www.cnblogs.com/jizhong/p/13306750.html