目录
Flume
一:flume是什么?
flume是一个可分布式,可靠。可高可用得日志收集,汇聚和传输得系统。适用于大部分得日常数据采集场景。
二:flume核心概念:
webserver-
taildir source---采集组件和数据源对接,获取数据。他有断点续传功能和读取多目录文件的功能
(source和channel中间有一个put事务)
Memory channel-- 读写速度快
(channel和sink中间有take事务)
通过这两个事务,flume提高了数据传输的完整性和准确性
kafka sink--能够将数据推送到kafka下消息队列。---hdfs
Kafka
一:kafka是什么?
kafka是一个消息队列
topic ---- 消息存放的目录即主题 producer 生产消息到topic的一方
consumer ---- 订阅topic消费消息的一方 broker kafka的服务实例就是一个broker
Kafka中发布订阅的对象是topic。我们可以为每类数据创建一个topic,把向topic发布消息的客户端称作producer
从topic订阅消息的客户端称作consumer。Producers和consumers可以同时从多个topic读写数据
一个kafka集群由一个或多个broker服务器组成,它负责持久化和备份具体的kafka消息。
二:为什么使用kafka?
解耦--异步--削峰
引入消息队列后, 系统A产生的数据直接发送到消息队列中, 哪个系统需要系统A的数据就直接去消息队列中消费, 这样系统A就和其他系统彻底解耦了
引入消息队列后, 系统A将消息发送到消息队列中就可以直接返回, 接口总共耗时很短, 用户体验非常棒
在高并发场景下(比如秒杀活动)某一刻的并发量会非常高, 如果这些请求全部到达MySQL, 会导致MySQL崩溃,
这时我们需要引入消息队列, 先将请求积压到消息队列中, 让MySQL正常处理.
Kafka是一个分布式的消息队列, 一个topic有多个partition, 每个partition分布在不同的节点上
Kafka还可以为partition配置副本机制, 一个主副本对外提供服务, 多个从副本提供冷备功能(即只起备份作用, 不提供读写).
三:如何保证消息不被重复?
导致消息重复的原因:分区重平衡--消费者重启或宕机 都会导致消费者消费消息后没有提交offset
业务手段来解决, 比如我们在消费前先查询数据库, 判断是否已消费(status = 1), 或消费后在Redis中做个记录,
下次消费前先从Redis中判断是否已消费.
四:如何保证消息不丢失?
导致消息丢失的原因:kafka没有保存消息 消费者还没消费就提交offset。然后消费者重启或宕机。
配置partition副本机制 关闭自动提交offset,改为手动提交
先消费,消费成功后在手动提交offset
五:如何保证消息的顺序性?
kafka只保证单个分区内的消息有序,所以保证消息的顺序性,只能一个topic。一个partition,一个consumer。
六:消息队列快写满怎么办?
原因:消费端出了问题,导致无法消费或消费极慢
紧急扩容---批量重导
七:kafka的ack机制:
针对生产者,我们的ack设置1,leader收到了,就回应生产者offset,
还可以设置0,这个很容易丢数据,设置-1的话,也可以,leader和follower都收到数据,才返回消息。