kafka入门

一、kafka概述

Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

kafka 主要应用场景是:日志收集系统和消息系统。

消息系统就是负责将数据从一个应用传输到另一个应用,有两种主要的消息传递模式:点对点传递模式发布-订阅模式。大部分的消息系统选用发布-订阅模式。Kafka就是一种发布-订阅模式。

1、kafka名词

主要分为 procuder、topics、partition、broker、consumer等。

详情查看博客,写的很明了:https://www.cnblogs.com/qingyunzong/p/9004509.html

二、入门应用

我们新建两个maven项目。
image

1、消息生产方

  • 引入kafka依赖
<dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
</dependency>
  • 配置 kafka 地址
server:
  port: 8080

spring:
  #kafka配置
  kafka:
    bootstrap-servers: 192.168.16.100:9092
  • 消息发送类
@RestController
public class KafkaTestController {

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;


    @GetMapping("/hello")
    public String helloKafka(){
        System.out.println("------>生成者发送消息");
        sendMessage();
        return "kafka消息已发送";
    }

    /**
     * 发送消息
     */
    public void sendMessage() {
        try {
            //生产消息
            String message = "hello! 测试kafka ";
            ListenableFuture<SendResult<String, String>> listenableFuture = kafkaTemplate.send("hello", message);
            listenableFuture.addCallback(new ListenableFutureCallback<SendResult<String, String>>() {
                @Override
                public void onSuccess(SendResult<String, String> result) {
                    System.out.println("发送消息成功");
                }

                @Override
                public void onFailure(Throwable ex) {
                    System.out.println("发送消息失败");
                }
            });
        } catch (Exception e) {
            System.out.println("发送消息出现异常");
        }
    }

}

启动前我们可以先用 cmd 窗口运行一个 kakfa 客户端,发送成功后可以直接在命令行中看到我们发布的消息。

2、消息消费方

  • 引入kafka依赖
<dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
</dependency>
  • 配置 kafka 地址
server:
  port: 8080
spring:
  kafka:
    consumer:
      group-id: defaultConsumerGroup
    listener:
      missing-topics-fatal: false
  • 创建监听类
    我们可以通过@KafkaListener来监听指定的topic,当topic中有新消息时就会执行下面的代码。
@Component
public class TopicComponent {

    @KafkaListener(topics = {"hello"})
    public void handMessage(ConsumerRecord<String,String> record){
        String topic = record.topic();
        String message = record.value();
        System.out.println("消费者接收到kafka消息,topic---->"+topic+",消息内容:"+message);
    }
}
  • 测试
    先启动消息生产方服务,再启动消息消费方服务,访问 http://localhost:8080/hello 查看控制台数据结果。

三、可视化工具

kafka可视化工具有很多种,比如 kafka-eagle(EFAK)、kafka-manager、kafka tool等。

在windows本地环境测试,我使用的kafka tool工具。kafka tool官网下载
image

下载对应版本按照即可,记得修改一下安装位置,保护保护你的C盘空间。

下载后打开软件界面如下,设置下zookeeper服务地址和端口,点击下面的 test 按钮测试下。
image

添加成功后就可以看到我们定义的topic和里面的数据了。
image

首次进来数据格式不对的话,可以修改一下默认的数据格式。
image

image

posted @ 2023-04-13 16:44  香酥豆腐皮  阅读(28)  评论(0编辑  收藏  举报
问道傍、杨柳为谁春,摇金缕。