kafka的学习总结

一、kafka的基本知识

1.kafka的安装

  • 部署一台zookeeper服务器(kafka包里有自带)
  • 安装jdk
  • 下载kafka的安装包:Apache Kafka
  • 上传到kafka服务器上:/usr/local/kafka
  • 解压缩压缩包
  • 进入到config目录内,修改server.properties
#broker.id属性在kafka集群中必须要是唯一
broker.id=0
#kafka部署的机器ip和提供服务的端口号
listeners=PLAINTEXT://localhost:9092   
#kafka的消息存储文件
log.dir=/usr/local/data/kafka-logs
#kafka连接zookeeper的地址
zookeeper.connect=localhost:2181
  • 进入到bin目录内,执行以下命令来启动kafka服务器(带着配置文件)
./kafka-server-start.sh -daemon ../config/server.properties 

 2.kafka的基本概念

名称解释
Producer生产者,用于生产消息的。
Consumer消费者,用于消费消息的。
Consumer Group消费者组,每个consumer都属于一个特定的consumer group,这是kafka用来实现消息的广播和单播的手段。
Broker消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群
Topic这是一个逻辑概念,每一条消息都有一个消息类别,这种类别被成为topic.生产者生产消息时需要指定一个topic,消费者在获取消息的时候也需要指定topic.
Partition分区。topic(主题)的物理体现。一个topic可以被分为一个或者多个partition,同一个partition中的消息是有序的,不同partition中的消息则丢失了有序性。

3.创建topic 

  • 通过kafka命令向zk中创建一个主题
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
  • 查看当前zk中所有的主题
./kafka-topics.sh --list --zookeeper localhost:2181

4.发送消息 

把消息发送给broker中的某个topic,打开一个kafka发送消息的客户端,然后开始用客户端向kafka服务器发送消息

./kafka-console-producer.sh --broker-list localhost:9092 --topic test

5.消费消息 

打开一个消费消息的客户端,向kafka服务器的某个主题消费消息

  • 方式一:从当前主题中的最后一条消息的offset(偏移量位置)+1开始消费
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --topic test
  • 方式二:从当前主题中的第一条消息开始消费
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --from-beginning --topic test

6.关于消息的细节 

  • 生产者将消息发送给broker,broker会将消息保存在本地的日志文件中
/usr/local/kafka/data/kafka-logs/主题-分区/00000000.log
  • 消息的保存是有序的,通过offset偏移量来描述消息的有序性
  • 消费者消费消息时也是通过offset来描述当前要消费的那条消息的位置

 7.单播消息和多播消息

一个partition只能被同一个消费者组的一个消费者消费,所以要实现单播只需要将消费者放到同一个消费者组里面,要实现多播则将消费者放到不同的消费者组里面。

单播:

./kafka-console-consumer.sh --bootstrap-server localhost:9092  --consumer-property group.id=testGroup --topic test

多播:

./kafka-console-consumer.sh --bootstrap-server localhost:9092  --consumer-property group.id=testGroup1 --topic test
./kafka-console-consumer.sh --bootstrap-server localhost:9092  --consumer-property group.id=testGroup2 --topic test

9.查看消费者组里的详细信息

./kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group testGroup

重点关注以下几个信息:

  • current-offset: 最后被消费的消息的偏移量
  • Log-end-offset: 消息总量(最后一条消息的偏移量)
  • Lag:积压了多少条消息

二、kafka中各组件之间的关系

  • producer将消息push给kafka,consumer从kafka中poll消息进行消费;
  • 一个kafka集群中包含若干个节点,这些kafka节点被称作为broker,其中一个broker作为controller;
  • 在broker中可以创建一个或多个逻辑分类topic,在创建的过程中需要指明一个或多个物理分区partition,同时还需要指明副本数,分别存放于不同的broker,这些partition副本中,副本是为了为主题中的分区创建多个备份,有一个作为leader,其余的作为follower。其中只有leader负责消息的读和写;

三、kafka集群中的controller、rebalance、HW

1.controller

  • 集群中谁来充当controller

每个broker启动时会向zookeeper创建一个临时序号节点,临时序号节点最小的那个borker将会作为controller,而临时序号节点是有序递增的,所以最先启动的那个broker会被成为controller(先到先得),controller将会负责这么几件事:

  • 当集群中有一个副本的leader挂掉,需要在集群中选举出一个新的leader,选举的规则是从isr集合中最右边获得
  • 当集群中有broker新增或减少,controller会同步信息给其他broker
  • 当集群中有分区新增或减少,controller会同步信息给其他broker

isr:可以同步和已同步的节点会被存入到isr集合中。

2.rebalance

  • 前提:消费组中的消费者没有指明分区来消费

  • 触发的条件:当消费组中的消费者和分区的关系发生变化的时候

  • 分区分配的策略:在rebalance之前,分区怎么分配会有这么三种策略

    • range:根据公式计算得到每个消费者消费哪几个分区:前面的消费者是分区总数/消费者数量+1,之后的消费者是分区总数/消费者数量
    • 轮询:大家轮着来
    • sticky:粘合策略,如果需要rebalance,会在之前已分配的基础上调整,不会改变之前的分配情况。如果这个策略没有开,那么就要进行全部的重新分配。建议开启。

3.HW

LEO是某个副本最后消息的消息位置(log-end-offset)

HW是已完成同步的位置。消息在写入broker时,且每个broker完成这条消息的同步后,hw才会变化。在这之前消费者是消费不到这条消息的。在同步完成之后,HW更新之后,消费者才能消费到这条消息,这样的目的是防止消息的丢失。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值