1、基础理论
1.1、什么是消息队列
- Message Queue
- 消息的传输过程中保存消息的容器
- 应用场景:程序解耦、异步消息、流量削锋…
1.2、消息队列的两种模式
点对点模式(消费者主动拉取数据,拉取成功后删除队列上的数据)
一个消息 只能有一个消费者可以消费
发布/订阅模式(消费者消费数据之后,队列上的数据不会被清除)
1.3、高可用原理
- High Availability
- 目标:减少停工时间
- 策略:消除单点故障
工作模式
2、Kafka概述
- 属于消息队列
- 分布式的
- 基于发布/订阅模式
- 主用于大数据实时处理
架构图
英文名 | 译名 | 说明 |
---|---|---|
Producer | 生产者 | 生产消息 |
Consumer | 生产者 | 消费消息 |
Consumer Group | 消费者组 | 由多个Consumer组成 是逻辑上的一个订阅者 |
Broker | 经纪人 | 一台kafka服务器就是一个Broker 一个集群由多个Broker组成 一个Broker可以容纳多个topic的partition |
Topic | 主题 | 可以理解为一个存放消息的逻辑上的队列 一个topic可以分布到多个Broker |
Partition | 分区 | 一个topic可以分存多个partition 每个partition是一个有序的队列 |
Replica | 复制品 | 数据副本 |
leader | 首领 | 对接生产者和消费者 |
follower | 追随者 | 实时同步leader的数据 leader故障时,某follower会成为新的leader |
一个主题下可以有多个分区;分区有序,主题不一定有序
消费者组是逻辑上的一个订阅者,由多个消费者组成
各个分区可以被消费者并行消费
1个消费者可以消费多个分区
1个分区只能有1个消费者
建议 某主题的分区数=订阅该主题的消费者组的消费者数
一台服务器有Broker,一个集群由多个Broker组成
一个Topic可以分布到多个Broker
3、数据存储原理
0、修改
segment
大小
vi $KAFKA_HOME/config/server.properties
log.segment.bytes=102400
1、创建分区,两个副本,三个分区
kafka-topics.sh \
--zookeeper hadoop100:2181/kafka \
--create \
--replication-factor 2 \
--partitions 3 \
--topic topicA
2、生产数据(Kafka内置的生产者,可用于压测)
kafka-producer-perf-test.sh --topic topicA \
--num-records 4000 --record-size 1024 \
--producer-props bootstrap.servers=hadoop100:9092 --throughput -1
参数 | 说明 |
---|---|
--num-records |
写多少个数据 |
--record-size |
每个数据多大(单位:byte) |
--producer-props |
指定数据写到哪个集群 |
--throughput |
写数据速率限制,-1表示不限 |
3、查看数据目录下名为
topicA
的主题
ls $KAFKA_HOME/logs | grep topicA
ssh hadoop101 'ls $KAFKA_HOME/logs | grep topicA'
ssh hadoop102 'ls $KAFKA_HOME/logs | grep topicA'
4、查看分区(文件夹)内的文件
ll topicA-1
5、查看索引文件以及偏移量(offset)
kafka-dump-log.sh --print-data-log --files 00000000000000000000.index
6、以上内容总结
4、生产数据的可靠性
-
什么是ack
-
英文全称:acknowledgement character
译名:命令正确应答
应答等级
-
什么是ISR
-
全称:in-sync replica set
与leader
同步到一定程度的follower
长期没同步的follower
将被踢出ISR
leader
挂掉后就从ISR
中选举新leader
kafka-topics.sh --describe --topic topicA --bootstrap-server hadoop100:9092
查看主题信息,如:分区数、领导者、追随者、Isr……
附录
en | 🔉 | cn |
---|---|---|
acknowledgement | əkˈnɑːlɪdʒmənt | n. 承认;确认;感谢 |
replica | ˈreplɪkə | n. 复制品,仿制品;摹本 |
bootstrap | ˈbuːtstræp | n. (靴筒后的)靴襻;[计] 引导程序;vt. 启动(电脑) |
转载:https://blog.csdn.net/Yellow_python/article/details/116275463
查看评论