史上最简单的kafka实战教程

你在写java 版的 kafka程序可能会遇到如下问题

问题一:程序抛出了org.apache.kafka.common.errors.TimeoutException:

在application.yml 中加入下面这句话 :logging.level.root:debug

然后再看报错,可以发现下面这个错误

错误:java.io.IOException: Can't resolve address: ubuntu:9092

原来是无法解析ubuntu.

解决办法:到C:\Windows\System32\drivers\etc ,用nopaid++打开hosts文件 加入下面这句话  远程主机的ip   ubuntu 

如   192.168.23.139     ubuntu

好了开始正题了:

一,你得有个虚拟机,里面跑着ubuntu

二,环境安装,1.装jdk, jdk1.8下载地址 2.环境变量配置

2、解压源码包

通过终端在/usr/local目录下新建java文件夹,命令行:

2、解压源码包
通过终端在/usr/local目录下新建java文件夹,命令行:

sudo mkdir /usr/local/java

然后将下载到压缩包拷贝到java文件夹中,命令行:
进入jdk源码包所在目录

cp jdk-8u25-linux-x64.tar.gz /usr/local/java

然后进入java目录,命令行:

cd /usr/local/java

解压压缩包,命令行:

sudo tar xvf jdk-8u25-linux-x64.tar.gz

然后可以把压缩包删除,命令行:

sudo rm jdk-8u25-linux-x64.tar.gz

3、设置jdk环境变量

这里采用全局设置方法,它是是所有用户的共用的环境变量

$sudo gedit ~/.bashrc

打开之后在末尾添加

export JAVA_HOME=/usr/local/java/jdk1.8.0_25  
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  

export PATH=${JAVA_HOME}/bin:$PATH

请记住,在上述添加过程中,等号两侧不要加入空格,不然会出现“不是有效的标识符”,因为source /etc/profile 时不能识别多余到空格,会理解为是路径一部分。
然后保存。

4、检验是否安装成功
在终端输入如下命令
java -version


下载kafka下载地址 ,解压文件

tar  zxvf  下载得文件位置  -C 要解压得位置 如/Download

1.打开kafka内置得zookeeper

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

2.打开kafka服务

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

3.创建一个topic

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic hello

4.查看我们创建得topic

bin/kafka-topics.sh --list --zookeeper localhost:2181 

5.创建一个消费者

bin/kafka-console-consumer.sh  --bootstrap-server  localhost:9092 --topic hello

6创建一个生产者

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic hello

5.查看我们的ip

ifconfig

我的ip是

192.168.23.139

一,创建一个springboot项目

二,修改application.properties 为application.yml

打开pom.xml 文件添加下面依赖

我的springboot parent 如下


    org.springframework.boot
    spring-boot-starter-parent
    2.0.3.RELEASE
     
这个是要添加的spring-kafka依赖


    org.springframework.kafka
    spring-kafka
    2.1.7.RELEASE

日志文件依赖


    org.projectlombok
    lombok
    true

打开application.yml文件

spring:
  kafka:
    producer:
      retries: 0
      batch-size: 16384
      buffer-memory: 33554432
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      bootstrap-servers: 192.168.23.139:9092
    consumer:
      bootstrap-servers: 192.168.23.139:9092
      group-id: foo
      auto-offset-reset: earliest
      enable-auto-commit: true
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
#logging.level.root: debug

创建一个消费者

@Component
@Slf4j
public class KafkaConsumer {

    /**
     * 监听test主题,有消息就读取
     *
     * @param message
     */
    @KafkaListener(topics = {"hello"})
    public void consumer(String message) {
        log.info("c1 消费了hello topic messge:{}", message);
    }

}

再创建一个生产者

@Component
@Slf4j
public class KafkaSender {
        @Autowired
        private KafkaTemplate kafkaTemplate;

        /**
         * 发送消息到kafka,主题为test
         */
        public void sendTest(){
            kafkaTemplate.send("hello","hello,kafka  "  + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")));
          
        }

}

application 主程序

@SpringBootApplication
@EnableScheduling
public class KafkaApplication {
   @Autowired
   KafkaSender kafkaSender;
   @Autowired
   KafkaConsumer kafkaConsumer;
    public static void main(String[] args) {
        SpringApplication.run(KafkaApplication.class, args);
    }
    @Scheduled(cron = "0/2 * * * * ? ")
    public void sendMsg(){
      kafkaSender.sendTest();
    }
}

你可能感兴趣的:(java,操作系统)