springBoot連接kafka——JavaDemo

1.服務器配置kafka,進入kafka bin目錄下,修改server.properties

vi config/server.properties

主要修改地方:

修改運行地址地址,改爲虛擬機ip

# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
#   FORMAT:
#     listeners = listener_name://host_name:port
#   EXAMPLE:
#     listeners = PLAINTEXT://your.host.name:9092

# host.name=192.168.217.142 192.168.217.142爲虛擬機服務ip,不修改java連接會報:
# java.net.ConnectException: Connection refused: no further information
listeners=PLAINTEXT://192.168.217.142:9092

修改kafka日誌

log.dirs=/opt/kafka/kafka_2.12-2.5.0/logs
 

2.啓動kafka

 bin/kafka-server-start.sh config/server.properties 

查看是否啓動成功

 ps ef|grep kafka

查看進程

jps -l

3.查看防火牆是否開啓,關閉防火牆(否則客戶端無法訪問)

firewall-cmd --state
如果是running的話

關閉防火牆(centos7關閉firewalld)

systemctl stop firewalld.service

Windows使用telnet測試端口能否訪問

telnet 192.168.217.142 9092 如果可以進入界面就說明可以訪問

4.java編寫消息生產者

package com.qiming.kafka.chapter1;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;

import java.util.Properties;

public class ProducerFastStart {
    // 主題名稱-之前已經創建
    private static final String topic = "heima-per";
    // Kafka集羣地址
    private static final String brokerList = "192.168.217.142:9092";

    public static void main(String[] args) {
        Properties properties = new Properties();
        // 設置key序列化器
        properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        //設置重試次數
        properties.put(ProducerConfig.RETRIES_CONFIG,10);

        // 設置值序列化器
        properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        //設置集羣地址
        properties.put("bootstrap.servers", brokerList);

        KafkaProducer<String,String> producer = new KafkaProducer<String,String>(properties);
        ProducerRecord<String,String> producerRecord = new ProducerRecord<String,String>(topic,"kafka-demo","hello.kafka 23!!");

        try {
            producer.send(producerRecord);
        } catch (Exception e) {
            e.printStackTrace();
        }
        producer.close();
    }
}

5.java編寫消息消費者

package com.qiming.kafka.chapter1;

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

import java.time.Duration;
import java.util.Collections;
import java.util.Properties;

/**
 * Kafka 消息消費者
 */
public class ConsumerFastStart {
    // Kafka集羣地址
    private static final String brokerList = "192.168.217.142:9092";
    // 主題名稱-之前已經創建
    private static final String topic = "heima-per";
    // 消費組
    private static
    final String groupId = "group.demo";

    public static void main(String[] args) {
        Properties properties = new Properties();
        properties.put("key.deserializer",
                "org.apache.kafka.common.serialization.StringDeserializer");
        properties.put("value.deserializer",
                "org.apache.kafka.common.serialization.StringDeserializer");
        properties.put("bootstrap.servers", brokerList);
        properties.put("group.id", groupId);

        KafkaConsumer<String, String> consumer = new KafkaConsumer<>(properties);
        consumer.subscribe(Collections.singletonList(topic));

        while (true) {
            ConsumerRecords<String, String> records =
                    consumer.poll(Duration.ofMillis(1000));
            for (ConsumerRecord<String, String> record : records) {
                System.out.println(record.value());
            }
        }
    }
}

6.啓動消費者,不斷監聽,再啓動消息生產者,可以看到消費者日誌打出hello.kafka 23!!

 

注意:一定要先啓動kafka

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章