Kafka消息中间件

Kafka消息中间件

  1. Kafka是一个高吞吐量的分布式的可复制的发布订阅消息系统
  2. 官网:http://kafka.apache.org/
  3. 中文网:http://kafka.apachecn.org/

分布式

  1. producer,broker,consumer均可部署在多个服务器
  2. 使用zookeeper进行分布式协调管理

高性能

  1. 端到端的消息压缩
  2. 支持批量发送,异步发送
  3. 顺序读写
  4. 使用zero copy技术:zero copy技术就是减少不必要的内核缓冲区跟用户缓冲区间的拷贝,从而减少CPU的开销和内核态切换开销,达到性能的提升;zero copy下,同样的读取文件然后通过网络发送出去,只需要拷贝三次,只发生两次内核态和用户态的切换

功能简单实用

  1. 支持持久化
  2. 消费者从broker拉取数据
  3. 消费的消息状态由消费者维护
  4. 支持分区,可并行消费
  5. 支持高可用(多副本,自动切换leader)

基本概念

  1. topic:每个topic可以认为是一类消息
  2. producer:消息生产者,向kafka的topics发布消息
  3. broker:kafka集群中的一台或者多台机器统称为broker,用来接收并存储消息
  4. consumer:消息消费者,订阅并处理topics中的消息
  5. consumer group:消费者组,相同的groupid的consumer组成一个组,一条消息只能被同组的某一个consumer进行消费,不能重复消费,不同groupid的consumer,能重复消费同一条消息
  6. partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列
  7. segment:段,partition物理上由多个segment组成,每个segment存储这message消息
  8. offset:一条消息在消息流中的偏移量

kafka架构

在这里插入图片描述

  1. kafka发送端采用push模式将消息发送到broker
  2. kafka通过zookeeper管理集群配置,选举leader,以及在consumer group 变化时rebalance
  3. kafka消费端采用pull模式订阅并消费消息
  4. 分区在producer端进行
  5. 分区是leader选举的单位
  6. offset由consumer端进行维护

kafka安装介绍

  1. 下载:http://kafka.apache.org/downloads.html

  2. 解压:tar -zxvf *.tgz -C 解压目录

  3. 启动服务:

    # 首先启动zookeeper服务
    bin/zookeeper-server-start.sh config/zookeeper.properties &
    
    # 修改配置文件
    config/server.properties 
    broker.id=  唯一编号,数字类型
    port=9092    端口号
    host.name=localhost  broker所在节点服务器
    log.dirs=/data/kafka-logs
    zookeeper.connect=xxx.xxx.x.x:2181, xxx.xxx.x.x :2181, xxx.xxx.x.x :2181
    
    # 启动Kafka
    bin/kafka-server-start.sh config/server.properties &
    
    

kafka常用命令

# 创建topic
kafka-topics.sh
--create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --  topic test

# 查看所有topic
kafka-topics.sh --list --zookeeper localhost:2181

# 查看具体topic
kafka-topics.sh --describe --zookeeper localhost:2181 --topic test

# 删除topic
kafka-topics.sh --zookeeper localhost:2181 --topic test --delete

# 修改topic分区
kafka-topics.sh --zookeeper localhost:2181 --alter --topic test --partitions 5

# 生产消息
kafka-console-producer.sh --broker-list localhost:9092 --topic test

# 消费消息(从头开始)
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

# 消费消息(从尾开始)
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --offset latest

# 消费消息(指定分区)
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --offset latest --partition 1

# 消费消息(取指定个数)
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --offset latest --partition 1 --max-messages 1

kafka核心原理-rebalance

rebalance,本质上是一种协议,它规定了一个consumer group是如何达成一致来分配订阅topic的所有分区

触发条件:当consumer或者topic自身发生变化时会触发rebalance

  • 组成员发生变更
  • 组订阅的topic数发生变更
  • 组订阅的topic的分区数发生变更

kafka核心原理-分区策略

策略分类:

  1. range:平均分配,若又余数,再平均分配到前面的分区

    针对每一个topic,分区按照顺序进行排序
    N = 分区数 / 消费者数量
    M = 分区数 % 消费者数量
    前M个消费者每个分配N+1个分区,后面的(消费者数据-M)个消费者每个分配N个分区
    
  2. round-robin:将所有的topic的所有分区按照字典顺序排序,然后轮询分配给每个consumer

  3. sticky:一种较为复杂的算法

    分区的分配要尽可能的均匀
    分区的分配尽可能的与上次分配的保持相同
    
  4. 自定义分配策略:实现AbstractPartitionAssignor类的assign方法

策略配置:

partition.assignment.strategy=range| roundrobin | sticky | 自定义策略

kafka核心原理-主从复制

kafka的高可靠性的保障来源于其健壮的副本(replication)策略,通过调节其副本相关参数,可以使得Kafka在性能和可靠性之间运转的游刃有余;Kafka从0.8.x版本开始提供partition级别的复制,replication的数量可以在$KAFKA_HOME/config/server.properties中配置

  1. 利用多份相同的备份共同提供冗余机制来保持系统的高可用性,这些备份在kafka中称为副本(replica)

  2. replica的个数小于等于broker数,即对每个partition而言每个broker上只会有一个replica

  3. 所有partition的所有replica默认情况会均匀分布到所有broker上

  4. kafka集群isr动态维护的一组同步副本集合(in-sync-replicas)

  5. 只有isr中的副本才有资格竞选leader

  6. 高水印值HW:high watermark,保存了该分区最新一条已提交的消息偏移量

  7. 日志末端位移LEO:log end offset,保存了该分区最新一条未提交的消息偏移量

在这里插入图片描述

  1. follower节点同步leader节点的消息偏移量的最小值即为leader的hw值

在这里插入图片描述

  1. ack机制:ack=0/1/-1的不同情况

    ack=0:
    producer不等待broker的ack,broker一接收到还没有写入磁盘就已经返回,当broker故障时有可能丢失数据
    ack=1:
    producer等待broker的ack,partition的leader落盘成功后返回ack,如果在follower同步成功之前leader故障,那么将会丢失数据
    ack=-1:
    producer等待broker的ack,partition的leader和follower全部落盘成功后才返回ack,数据一般不会丢失,延迟时间长但是可靠性高
    
  2. 以下是4台broker,topic为4分区2副本的分布图,其中虚线框为副本

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值