Kafka基础02

Kafka基础02,第1张

Kafka基础02 kafka的基本介绍

消息队列的说明(MessageQueue)

1)消息队列必须支持快进快出
2)消息队列本身就是临时存储数据

RabbitMQ < ActiveMQ < RocketMQ(阿里) < kafka(领英)

消息队列的应用场景

1)应用耦合
2)异步处理
3)限流削峰(起缓冲的作用)
4)消息驱动的系统(系统分为消费者,生产者)

消息队列的两种方式

1)点对点的模式(一对一)
   1- 消息队列
   2- 生产者
   3- 消费者
2)发布/和订阅的模式(一对多)
   1- 消息队列
   2- 发布者
   3- 接收者

kafka的架构

  • 说明
1)broker:kafka的从节点
2)producer:生产者
3)consumer:消费者
4)topic: 主题(类似一个逻辑容器,负责存储数据)
5)shard:分片
6)replicas:副本

kafka的特点

1)可靠性: 	
	分布式, 分区 , 复制 和容错等, 数据不容易丢失  集群也是非常稳定, 宕机风险较低.
2)可扩展性: 	
	非常方便的扩展kafka集群的节点.
3)耐用性: 	
	数据都是存储在磁盘上, 持久化存储的.
4)性能: 
    单台可达 10w 并发, 还可以通过扩展节点, 提升更高的性能, 保证零停机, 零数据丢失.

kafka的启动指令

#kafka的启动命令
cd /export/server/kafka_2.12-2.4.1/bin
./kafka-server-start.sh ../config/server.properties

#kafka的后台启动
nohup ./kafka-server-start.sh ../config/server.properties &

#kafka中如何创建主题
./kafka-topics.sh  --create --zookeeper node1:2181,node2:2181,node3:2181  --topic test01 --partitions 2 --replication-factor 2
参数说明:
--partitions : 指定topic的分片数量
--replication-factor: 指定每个分片下有几个副本  (包含本身)

#通过shell模拟生产者
./kafka-console-producer.sh --broker-list node1:9092,node2:9092,node3:9092 --topic test01
#通过shell命令模拟消费者
./kafka-console-consumer.sh  --bootstrap-server node1:9092,node2:9092,node3:9092 --topic  test01

#kafka的shell命令查看主题
./kafka-topics.sh  --list --zookeeper node1:2181,node2:2181,node3:2181

#查看某一个topic的详细信息
./kafka-topics.sh  --describe --zookeeper node1:2181,node2:2181,node3:2181 --topic test01

#为某个topic增加分片的数量
./kafka-topics.sh  --alter --zookeeper node1:2181,node2:2181,node3:2181 --topic test01 --partitions 4

#删除一个topic
./kafka-topics.sh  --delete --zookeeper node1:2181,node2:2181,node3:2181 --topic test01
kafka的进阶知识

kafka的分片副本机制

1)分片的作用:
   1- 解决的单机存储上限问题
   2- 提高查询效率
2)副本的作用:
   1- 解决数据的高可用问题,提高数据的容错率

kafka如何保证数据不丢失

  • ACK确认机制,生产者发送数据的时候分为同步发送和异步发送,无论何种发送数据的方式,都要用ACK机制
  • ACK的值主要有:0, 1, -1(all)
     1)0的意思是:生产者只把数据写给broker即可无需等待broker返回的ack校验码,直接判断数据写入成功
     2)1的意思是: 生产者把数据写给broker之后,只需要等待主副本返回的ack即可,收到即为成功
	 3)-1(all)的意思是: 生产者把数据写给broker之后,需要等待到所有的副本,包括主副本和各副本返回的ack校验码,全收到即为成功
  • 从三个角度解释kafka如何防止数据不丢失
1)生产者的角度:
     1- ack机制, 重试策略,可以通过缓冲池,启用告警系统
2)broker的角度:
     1- 副本机制
3)消费者的角度:
     1-由broker记录消费者的消费情况(消费偏移量 consumer_offset)
     (消费者每次消费情况都是由broker记录的,当消费者消费数据的时候,会先询问broker,该消费者所在的消费者组上次消费到了哪里,如果broker有记录,就让该消费者继续消费,分片中的某一条数据只能被消费者组中的某一个消费者消费,如果broker没有消费记录,则让消费者从头开始消费,消费偏移量记录为0,消费者可以消费任意的数据,后者在任意时刻提交消费偏移量)
kafka的存储查询机制

存储机制

1)kafka是临时存储数据的,且采用分片 + 副本机制的,具体的存储流程如下:
    1- 因为Kafka是临时存储数据的,当数据被消费之后,或者经过一段时间,这些过期的数据会被清理掉,如果是单文件存储,则不方便我们进行删除 *** 作,如果是多文件存储,则我们只需要将过期的文件直接删除即可(过期的默认值为:7天)
    2- Kafka采用Segment段的方式来存储数据的,它有包含*.log 和 *.index两个文件
      *.index文件的意思是,记录的是消费的偏移量,以及其对应的物理偏移量(具体的数据的起始字节)
      *.log文件的意思是,记录的是具体的数据(一个字节 = 一个物理偏移量)
    3- 当Segment段中的 *.log文件达到一定的阈值后(默认1GB),就会滚动形成一个Segment段

kafka的查询机制

1)先根据要查找的offset(消费偏移量),找到其对应的Segment段
2)再去根据Segment段的 *.index文件中,根据消费偏移量,找到其对应的物理偏移量
3)根据上述的物理偏移量,去 *.log文件中去查找具体的数据即可

kafka的数据分发策略

Kafka中的默认分发策略采用的是 DefaultPartitioner.class 类的规则,但是关于Kafka的所有的数据分发策略,总结起来有四种:

1)轮询的方式发送 弊端:同批次的数据被散, (kafka2.4的时候优化为:粘性分发)
2)哈希分发的方式, 即,根据键的哈希值进行分发
3)指定分区分发, 即,分区编号是从0开始,一次累加,给谁发,就写谁的编号
4)自定义分发策略

Kafka负载均衡原理

1)在一个消费者组内,消费者的数量最多和topic的分片的数量相等,如果大于了分片的数量,必然会出现某些消费者出于闲置的状态
--------------------------------------------------
1) 请思考: 如果模拟点对点消费模式呢?
     方案一: 只有一个消费者来消费这个topic
     方案二: 将消费者个topic的消费者全部放置在一个组内

2) 请思考: 如何模拟发布订阅消费模式呢?
      将多个消费者放置在不同的消费者组
kafka-eagle可视化工具

kafka数据的积压
  • 数据积压的原因
1)因为数据的写入目的容器失败,从而导致消费失败
2)因为网络延迟消息消费失败
3)消费的逻辑过于复杂,导致消费的过慢,出现积压问题
  • 数据积压的解决方式
    对于第 1 种, 我们常规解决方案, 处理目的容器,保证目的容器是一直可用状态
	对于第 2 种, 如果之前一直没问题, 只是某一天出现, 可以调整消费的超时时间
	对于第 3 种, 一般解决方案,调整消费代码, 消费更快即可, 利于消费者的负载均衡策略,提升消费者数量
Kafka的数据限额
  • 说明
生产者和消费者以极高的速度生产/消费大量数据或产生请求,从而占用broker上的全部资源,造成网络IO饱和。
	有了配额(Quotas)就可以避免这些问题。Kafka支持配额管理,从而可以对Producer和Consumer的produce&fetch *** 作进行流量限制,防止个别业务压爆服务器。
  • 设置方式
限制producer端的速率
		//为所有client id设置默认值,以下为所有producer程序设置其TPS不超过1MB/s,即1048576/s,命令如下:
		bin/kafka-configs.sh --zookeeper node1.itcast.cn:2181 --alter --add-config 'producer_byte_rate=1048576' --entity-type clients --entity-default

		//运行基准测试,观察生产消息的速率
		bin/kafka-producer-perf-test.sh --topic test --num-records 500000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1.itcast.cn:9092,node2.itcast.cn:9092,node3.itcast.cn:9092 acks=1
		
--------------------------------------------------
	限制consumer端的速率
		//对consumer限速与producer类似,只不过参数名不一样。
		//为指定的topic进行限速,以下为所有consumer程序设置topic速率不超过1MB/s,即1048576/s。命令如下:
		bin/kafka-configs.sh --zookeeper node1.itcast.cn:2181 --alter --add-config 'consumer_byte_rate=1048576' --entity-type clients --entity-default
				
		//运行基准测试,观察消息消费的速率
		bin/kafka-consumer-perf-test.sh --broker-list node1.itcast.cn:9092,node2.itcast.cn:9092,node3.itcast.cn:9092 --topic test04 --fetch-size 1048576 --messages 500000
Flume的介绍

Flume的架构图

1)Flume是采集数据的,一个采集任务对应一个Agent对象
2)Agent对象由三部分组成,分别是:Source, Channel, Sink
3)采集的那台的数据就把Flume部署到那台机器上
4)Flume之所以叫日志采集,是因为只要配置好采集日志文件,Flume就可以采集数据了
5)采集的数据是用Event,他是Flume内部传输的最基本的单元
  • Flume的三个组件
1)Source:
2)Sink:
3)Channel:

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5687553.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存