kafka基础学习笔记

一、 什么是Kafka?
  • 分布式的基于发布/订阅模式的消息队列

    • 消息队列的两种模式

      • 1、点对点模式
      • 2、发布/订阅模式
  • 分布式流平台

二、 主要作用
  • 异步
  • 消峰
  • 解耦
三、 Kafka基础架构
  • 为了方便扩展,并提高吞吐量,可以把一个topic分成多个partition(分区);

  • 配合分区的设计,提出消费者组的概念,组内每个消费者并行消费;

  • 为提高可用性,可以为每个partition增加若干副本。
    Kafka基础架构

    Kafka基础架构图

    • 1.Producer:消息生产者,就是向Kafka的broker发送消息的客户端;
    • 2.Consumer:消息消费者,从Kafka的broker接收消息的客户端;
    • 3.ConsumerGroup:消费者组,由多个Consumer组成。组内每个消费者负责消费不同分区的数据,一个分区只能由一个消费者消费,消费者组之间互不影响;
    • 4.Broker:一台Kafka的服务器就是一个Broker。一个集群由多个broker组成。一个broker可以有多个topic。
    • 5.Partition:为实现扩展性,一个topic可以分不到多个broker上,每个broker上的topic就是一Partition。
四、 Kafka命令行操作
  • 1.启动集群 (依次启动各个节点上的Kafka)
[root@hadoop01 kafka]# kafka-server-start.sh -daemon /opt/kafka/config/server.properties
[root@hadoop02 kafka]# kafka-server-start.sh -daemon /opt/kafka/config/server.properties
[root@hadoop03 kafka]# kafka-server-start.sh -daemon /opt/kafka/config/server.properties 
  • 2.关闭集群
[root@hadoop01 kafka]# kafka-server-stop.sh
[root@hadoop02 kafka]# kafka-server-stop.sh
[root@hadoop03 kafka]# kafka-server-stop.sh
  • 3.查看当前服务器中所有topic
[root@hadoop01 kafka]# kafka-topics.sh --list --zookeeper hadoop01:2181
  • 4.创建topic
[root@hadoop01 ~]# kafka-topics.sh --zookeeper hadoop01:2181 --create --topic yang01 --partitions 3 --replication-factor 1
  • 5.删除topic
[root@hadoop01 ~]# kafka-topics.sh --zookeeper hadoop01:2181 --delete --topic yang01

ps:需要server.properties中设置delete.topic.enable=true否则只是标记删除,不会真删除
  • 6.查看某个Topic的详情
[root@hadoop01 ~]# kafka-topics.sh --describe --topic yang01 --zookeeper hadoop01:2181
  • 7.发送消息
[root@hadoop01 ~]# kafka-console-producer.sh --topic yang01 --broker-list hadoop01:9092
>1
>2
>3
  • 8.消费消息(在另一台broker上)
[root@hadoop01 ~]# kafka-console-consumer.sh 
--topic yang01
--bootstrap-server hadoop01:9092 
--from-beginning
1
2
3

ps:from-beginning:会把topic中以往所有的数据都读取出来。根据业务场景选择是否增加该配置。
五、 Kafka运行流程
  • 先从集群获取分区的leader
  • producer将消息发送给leader
  • leader将消息写入本地文件
  • follower从leader同步消息
  • follower将同步完消息返回ACK给leader
  • leader收到所有副本ACK后发送ACK给producer
    ps:
    • 写入数据的时候永远的找leader,不会直接将数据写入follower,follower是主动的去leader进行同步的
    • producer采用推push模式将消息发布到broker,每条消息都被追加(append)到分区中,属于顺序写入磁盘(顺序写入磁盘效率比随机写内存要高,是保障kafka高吞吐量的原因之一)
六、Kafka文件存储机制
1、存储机制在这里插入图片描述

由生产者生产的消息会不断追加到log文件的末尾,为防止文件过大导致定位效率低下和数据不方便清除,Kafka采用了分片和索引机制。将每个partition分成多个segment,每个segment下面包含“.index文件”、“.log文件”、“.timeindex”文件,log文件就实际是存储message的地方,而index和timeindex文件为索引文件,用于检索消息。

2、index和log文件

在这里插入图片描述

七、Kafka分区(partition)简介
  • 优点:
    • 1、方便扩展:因为一个topic可以有多个partition,当数据量增加时可以相应的增加分区数
    • 2、提高并发:以partition为读写单位,可以多个消费者同时消费数据,提高处理效率。
  • 分区原则
    • 1、 partition在写入的时候可以指定需要写入的partition,如果指定partition,则写入对应的partition
    • 2、 如果没有指定partition,但是有key的情况下,则会根据key的hash值与topic的partition数进行取余,得到partition的值
    • 3、 如果既没指定partition,又没有设置key,第一次调用时会随机生成一个整数,后面每次调用在这个整数上自增,将这个值与topic的partition数进行取余得到partition的值
八、Kafka应答机制

在生产者向队列写入数据的时候可以设置参数来确定是否确认kafka接收到数据,这个参数可设置的值为0、1、all。

  • 0:代表producer往集群发送数据不需要等到集群的返回,不确保消息发送成功。安全性最低但是效率最高。
  • 1:代表producer往集群发送数据只要leader应答就可以发送下一条,只确保leader发送成功。
  • all:代表producer往集群发送数据需要所有的follower都完成从leader的同步才会发送下一条,确保leader发送成功和所有的副本都完成备份。安全性最高,但是效率最低。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值