Kafka核心概念介绍与安装

2024-02-11 SpringBootRabbitMQ中间件
概念 说明
Topic(主题) 每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic,数据存储在Topic中
Partition(分区) 数据存储的基本单元,topic中的数据分割为一个或多个partition,每个topic至少有一个partition,是有序的
Broker Kafka的服务端程序,可以认为一个mq节点就是一个broker,broker存储topic的数据
Producer(生产者) 消息生产者,用于将消息发送到Kafka
Consumer(消费者) 用于处理消息
ConsumerGroup(消费者组) 同个topic, 广播发送给不同的group,一个group中只有一个consumer可以消费此消息

# 其他概念

上述的我们能直接用到的概念,还有一些偏底层的概念。

  • Replication 副本(备胎)
    • 同个Partition会有多个副本replication ,多个副本的数据是一样的,当其他broker挂掉后,系统可以主动用副本提供服务
    • 默认每个topic的副本都是1(默认是没有副本,节省资源),也可以在创建topic的时候指定
    • 如果当前kafka集群只有3个broker节点,则replication-factor最大就是3了,如果创建副本为4,则会报错
  • ReplicationLeader、ReplicationFollower
    • Partition有多个副本,但只有一个replicationLeader负责该Partition和生产者消费者交互
    • ReplicationFollower只是做一个备份,从replicationLeader进行同步
  • ReplicationManager
    • 负责Broker所有分区副本信息,Replication 副本状态切换
  • offset
    • 每个consumer实例需要为他消费的partition维护一个记录自己消费到哪里的偏移offset
    • kafka把offset保存在消费端的消费者组里

# 安装Kafka

  • 使用docker安装Zookeeper:docker run -d --name xk857_zookeeper -p 2181:2181 -t wurstmeister/zookeeper

  • Kafka下载地址:https://kafka.apache.org/downloads (opens new window)

    • kafka-xx-yy:xx 是scala版本,yy是kafka版本
  • 安装Kafka (默认 9092端口)

    • 解压:tar -zxvf kafka_2.13-2.8.2.tgz

    • config目录下 server.properties

      #标识broker编号,集群中有多个broker,则每个broker的编号需要设置不同
      broker.id=0
      
      #修改下面两个配置 ( listeners 配置的ip和advertised.listeners相同时启动kafka会报错)
      listeners=PLAINTEXT://192.168.133.102:9092(内网Ip)
      advertised.listeners=PLAINTEXT://cloud:9092(公网ip,如果是虚拟机可以使用hosts映射)
      
      #修改zk地址,默认地址
      zookeeper.connection=localhost:2181
      
    • bin目录启动

      #启动
      ./kafka-server-start.sh  ../config/server.properties
      
      #停止
      kafka-server-stop.sh
      
    • 创建topic

      ./kafka-topics.sh --create --zookeeper 192.168.133.102:2181 --replication-factor 1 --partitions 1 --topic 自定义Topic名字
      
    • 查看topic

      ./kafka-topics.sh --list --zookeeper 192.168.133.102:2181
      

# 守护进程方式启动Kafka

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