kafka白话文 压缩学习成本

学习kafka 花了一天时间 , 当demo写出来后 感觉就2个小时就可以入手的东西;讲点通俗易懂的东西吧

环境linux

下载kafka 地址:http://kafka.apache.org/downloads 

选择 Binary downloads:

  • Scala 2.13  - kafka_2.13-2.6.0.tgz (asc, sha512)

传到linux服务器中 放到自己存放的文件夹

tar -zxvf kafka_2.13-2.6.0.tgz

cd kafka_2.13-2.6.0

新版kafka自带zookeeper 因此先启动zookeeper   
启动方式: bin/zookeeper-server-start.sh config/zookeeper.properties &

再启动kafka  启动方式:bin/kafka-server-start.sh config/server.properties & 

命令说明: &是为了能退出命令行  也可以用-demon 例如:bin/zookeeper-server-start.sh -demon onfig/zookeeper.properties

停止命令:1.bin/kafka-server-stop.sh     2. bin/zookeeper-server-stop.sh  

详细:https://www.cnblogs.com/rainy-shurun/p/5131394.html

如果需要想看到控制台 那么就不加& 启动zookeeper后  再开启一个shell 进入到kafka_2.13-2.6.0执行命令即可

到这一步 kafka就部署完成(非集群)

java操作 发布消息

idea开发工具:File -> new Project -> Spring Initializr 直接next -> 填写Group、Artifact -> 点击选择消息中间件 Messaging ,右侧Spring for Apache Kafka 打勾 直接下一步

略等一会 初始springBoot项目完成后

application.properties更名为application.yml(没有为什么,就是习惯配置格式而已)

spring:
  kafka:
    bootstrap-servers: 127.0.0.1:9092 #指定kafka server的地址,集群配多个,中间,逗号隔开
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    consumer:
      group-id: default_consumer_group #群组ID
      enable-auto-commit: true
      auto-commit-interval: 1000
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
server:
  port: 8500

添加生产者

package com.tgxun.kafka.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProducerController {

    @Autowired
    private KafkaTemplate kafkaTemplate;

    @GetMapping("/send")
    public String send(String msg){
        kafkaTemplate.send("topic01",msg);
        return "success";
    }

}

添加消费者

package com.tgxun.kafka.controller;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

/**
 * 监听服务器上的kafka是否有相关的消息发过来
 */
@Component
public class ConsumerController {

    /**
     * 定义此消费者接收topics = "topic01"的消息,与controller中的topic对应上即可
     * @param record 变量代表消息本身,可以通过ConsumerRecord类型的record变量来打印接收的消息的各种信息
     */
    @KafkaListener(topics = "topic01")
    public void listen(ConsumerRecord record){
        System.out.printf("topic is %s, offset is %d, value is %s \n", record.topic(), record.offset(), record.value());
    }
}

测试: 浏览器输入 http://localhost:8500/send?msg=测试kafka01

看控制台即可  不出意外 应该是Expiring 1 record(s)......

回到linux 这是因为本机访问不到,由于hostname 配置文件中默认是无法确定机器的ip的, 这里没明白直接往下看

来到kafka_2.13-2.6.0/config 找到server.properties 

在最后加都行
host.name=192.168.1.1   # 这里就是自己虚拟机的ip 每个人的都不一样,所以没法默认给出
listeners=PLAINTEXT://192.168.1.1:9092  #这里同上

加完以后 保存 停止zookeeper+kafka 再按顺序启动

回到springboot项目 重新启动, 浏览器输入测试路径 ok 然后kafka就差不多这样了(非集群)  然后花1个小时看kafka的名词就行了 例如什么是topic  queue作用 发布订阅等等, 一开始就来理论的 看的会很晕,等你看完了来做项目,如果看的时间太长, 看到某些名词 你会有好像有这么回事,但又记不起来具体是个啥,这种感觉让人很难受, 又会导出搜资料. 然后花时间. 如上操作完成,梳理下基本就差不多会kafka了 ,具体看业务应用

你可能感兴趣的:(压缩学习成本系列,kafka)