大数据面试重点:kafka工作原理

一、消息中间件

1.常见消息中间件

ActiveMQ
RabbitMQ
RocketMQ
Kafka
Redis
……

2.为什么使用消息中间件

异步调用:同步变异步
应用解耦/可扩展性:提供基于数据的接口层
流量削峰:缓解瞬时高流量压力
可恢复性
顺序保障

3.消息中间件工作模式

点对点模式:一对一,消费者主动拉取数据

在这里插入图片描述
** 发布订阅模式:一对多,数据生产后,推送给所有订阅者**
在这里插入图片描述

4.消息中间件中的术语

Broker:消息服务器,提供核心服务
Producer:消息生产者
Consumer:消息消费者
Topic:主题,发布订阅模式下的消息统一汇集地
Queue:队列,点对点模式下的消息队列

二、Apache Kafka

1.kafka的特点

Kafka是一种高吞吐量的分布式发布-订阅 消息系统,专为超高吞吐量的实时日志采集、实时数据同步、实时数据计算等场景来设计

  • 快速,单Broker每秒几百MB读取
  • 不停机扩展集群
  • 消息副本冗余
  • 实时数据管道

使用Scala编写

在这里插入图片描述

2.kafka安装

  • 下载解压
  • 配置文件
  • config/server.properties
	broker.id=0
	delete.topic.enable=true
	listeners=PLAINTEXT://hadoop101:9092
	log.dirs=/data/kafka-logs
	zookeeper.connect=hadoop101:2181        #hadoop101要根据情况换为自己的hostname
  • 启动
  • bin/kafka-server-start.sh config/server.properties
  • 验证
  • bin/kafka-topics.sh、kafka-console-producer.sh、kafka-console-consumer.sh

3.Kafka架构

Broker:Kafka集群中的服务器
Topic:维护一个主题中的消息,可视为消息分类
Producer:向Kafka主题发布(生产)消息
Consumer:订阅(消费)主题并处理消息

在这里插入图片描述

Kafka Message

header:消息头,固定长度
offset:唯一确定每条消息在分区内的位置
CRC32:用crc32校验消息
“magic”:表示本次发布Kafka服务程序协议版本号
“attributes”:表示为独立版本、或标识压缩类型、或编码类型
body:消息体
key:表示消息键,可选
value bytes payload:表示实际消息数据

Kafka Producer

生产者将消息写入到Broker
Producer直接发送消息到Broker上的Leader Partition
Producer客户端自己控制着消息被推送到哪些Partition
随机分配、自定义分区算法等
Batch推送提高效率

Kafka Broker

Kafka集群中每个Broker都可以响应Producer的请求
哪些Broker是存活的?
Topic的Leader Partition在哪?
每个Broker充当Leader和Followers保持负载平衡
Leader处理所有读写请求
Followers被动复制Leader

Kafka Consumer

消费者通过订阅消费消息
offset的管理是基于消费组(group.id)的级别
每个Partition只能由同一消费组内的一个Consumer来消费
每个Consumer可以消费多个分区
消费过的数据仍会保留在Kafka中
消费者数量一般不超过分区数量
消费模式
队列:所有消费者在一个消费组内
发布/订阅:所有消费者被分配到不同的消费组

4.ZooKeeper在Kafka中的作用

Broker注册并监控状态
/brokers/ids
Topic注册
/brokers/topics
生产者负载均衡
每个Broker启动时,都会完成Broker注册过程,生产者会通过该节点的变化来动态地感知到Broker服务器列表的变更
offset维护
Kafka早期版本使用ZooKeeper为每个消费者存储offset,由于ZooKeeper写入性能较差,从0.10版本后,Kafka使用自己的内部主题维护offset
在这里插入图片描述

Kafka优化

Kafka优化-1

消息有序

  • Kafka保证在同一主题同一分区内有序
  • 如何确保基于主题全局有序
    • 一个主题一个分区
    • 生产者将消息按Key分组如(Table+PK),一个分组写入一个分区

Kafka优化-2

消息副本保证

  • request.required.acks
    • 生产者从不等待ack
    • 生产者等Leader写成功后返回
    • /all -生产者Leader和所有ISR中的Follower写成功后返回
  • min.insync.replicas
    • 该属性规定了最小的ISR数。当producer设置request.required.acks为all或-1时,指定副本(replicas)的最小数目,如果这个数目没有达到,producer会产生异常

Kafka优化-3

Kafka Producer API

  • 消息积累在Batch的缓冲区
  • 消息按分区批处理,正处于批处理级别重试中
  • 重试后,过期的批次被丢弃
  • Producer close/flush失败
  • 数据生产比交付快,导致BufferExhausedException

Kafka优化-4

最佳实践

  • 结合Spark Streaming的实时流处理
  • 通用消息总线
  • 收集用户活动数据
  • 从应用程序、服务器或设备收集操作指标
  • 日志聚合(结合ELK)
  • 分布式系统提交日志
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值