Kafka的介绍和原理分析

文章介绍了Kafka的安装部署,包括Zookeeper环境的准备和Kafka配置文件的修改。接着,展示了如何在SpringBoot中整合Kafka进行消息的发送和接收。文章还探讨了Kafka的工作原理,如分区、主题、副本和生产消费流程。
摘要由CSDN通过智能技术生成

简介

kafka是由scala语言开发的一个消息中间件,常用于消息、日志的收集,其功能相对单一、吞吐量较高。本文就从kafka的安装部署、应用以及框架原理方面来介绍kafka。

环境搭建

kafka集群节点、主题、消费者相关的元数据信息保存在zookeeper中,zookeeper我们都知道是一个分布式协调框架,能够保存集群少量的信息。因此,需要准备zookeeper的环境,另外kafka的是运行在jvm中,所以需确保安装有jdk。

kafka搭建

1.下载kafka的安装包,官网地址:https://kafka.apache.org/downloads,使用版本kafka_2.11‐2.4.1.tgz,下载后使用 tar -zxvf 命令解压到相应文件夹中。
1.1修改配置文件信息 server.properties

#在集群部署中,不同broker的id配置不能相同且是非负整数
broker.id=0
#注意添加内网监听的IP地址
listeners=PLAINTEXT://l:9092
#添加外网的监听地址、端口号
#advertised.listeners=PLAINTEXT://:9092
#修改kafka消息保存的目录
log.dirs=/usr/mq/kafka/logs
#配置zookeeper的地址信息
zookeeper.connect=127.0.0.0:2181

内外网监听地址配置有误,出现的异常展示:
在这里插入图片描述
2.后台启动kafka,启动前注意zookeeper要启动

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

3.zookeeper中验证节点是否启动成功
在这里插入图片描述
可以看到 节点0已经注册到zookeeper中。
4.发送消息
在这里插入图片描述

整合spingboot的使用

前面我们用命令做了发送消息的测试,接下来看springboot 如何整合kafka发送接受消息
1.配置依赖

<dependency>
      <groupId>org.springframework.kafka</groupId>
      <artifactId>spring-kafka</artifactId>
 </dependency>

2.配置yml中kafka信息

spring:
  application:
    name: demo

kafka:
    bootstrap-servers: 127.0.0.0:9092
    producer: # producer 生产者
      retries: 0 # 重试次数
      acks: 1 
      batch-size: 16384 # 批量大小
      buffer-memory: 33554432 # 生产端缓冲区大小
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    consumer: # consumer消费者
      # 默认的消费组ID
      group-id: testGroup
      # 是否自动提交offset
      enable-auto-commit: true 
      # 接收到消息后多久提交offset
      auto-commit-interval: 1000 
      # earliest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费
      # latest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据
      # none:topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常
      auto-offset-reset: latest
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

3.发送消息示例

@RestController
public class KafkaController {

    @Autowired
    private KafkaTemplate<String, Object> kafkaTemplate;

    @GetMapping("/kafka/send")
    public Boolean  sendMessage1() {
        kafkaTemplate.send("test", "nihao kafka !");
        return true;
    }

原理介绍

在了解kafka的到工作原理前,先来了解下框架组成

组成部分

kafka是可以集群部署,会将服务信息注册到zookeeper中,一个broker就是一个集群节点。生产者会发送消息到某个主题的分区,一个主题可以有多个分区,每个分区可以设置多个副本
1.分区partition:分区的实现能够是kafka存储海量数据,不同的分区可以部署在不同的机器
2.主题topic:是一个逻辑概念,一个主题可以有多个分区,而某一分区属于一个主题,主题用来区分不同类型的消息。
3.副本replication:分区partition可以设置多个副本,当leader副本所在的broker出现异常宕机时,kafka会从副本中选择一个作为主副本,来提供读写请求。
4.生产者producer:生产消息发送到某一主题对应的分区中
5.消费者consumer:从某一主题中消费消息
在这里插入图片描述

发送消息的流程

1.生产者producer往给定topic发送消息时,会选出发送的partition
1.1 分区选择方式 指定分区时直接使用, 未指定但存在key,根据其hash值选出,若都不存在时,轮询选择partition
2.选出分区后从zookeeper中获取分区主副本所在的broker地址信息
3.发送消息到对应broker中
4.主副本收到消息,同步副本信息 ,满足配置的ack时,返回给producer成功的信息

消费消息的流程

1.消费者消费某个主题消息,消费者属于某一个消费者组,消费者组中不同的消费者对应主题的不同分区,消费者选择分区进行消费,选择规则跟发送规则相同
2.根据选择的分区,从zookeeper中获取分区主副本所在的broker,拉取消息

消息的存储

消息存储的位置,在配置的log文件夹下可以看见topic-(分区号),这个文件夹下存放分区的消息
在这里插入图片描述
消息存在.log的文件中并且是分段存储的,当文件大小达到1G时,会重新开启一个文件存储;index/timeindex文件是索引文件,根据偏移量或时间快速查找消息的位置,然后在从log文件中查找。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值