一,概述
1、定义
1)传统定义 分布式 发布订阅 消息队列 发布订阅:分为多种类型 订阅者根据需求 选择性订阅 2)最新定义 流平台
2.消息队列应用场景
1)缓存消峰 2)解耦 3)异步通信
3、两种模式
1)点对点 一个生产者 一个消费者 一个topic 会删除数据 2)发布订阅 多个生产者 消费者多个 而且 互相独立 多个topic 不会删除数据
4、架构
1)生产者
2)broker
broker
topic
分区patition
可靠性
leader
生产者和消费者
3)消费者
消费者和消费者相互独立 消费者组(某一个分区 只能由一个消费者消费)
4)zookeeper
broker.ids 0 1 2 leader 每个topic下的每个patition的每个leader
5、常用命令行
1)主题kafka-topic.sh --bootstrap-servert --topic first --create --delete --alter --list --describe --partitions
2)生产者 kafka-console-producer.sh
1)--bootstrap-servert
2)--topic first
3)消费者 kafka-console-consumer.sh
1)--bootstrap-servert
2)--topic first
###二、生产者 1、异步发送API 0)配置 (1)连接bootstrap-server(2) key value序列化
1)创建生产者
KafkaProducer<string , string> ()
2)发送数据
send(send ( , new ca1lback) 3)关闭资源 3)同步发送 。 send ( ) send ( , new callback).gert。 。 。
4,分区
(1)好处 存储 计算
(2)默认分区规则
1)指定分区 按分区走
2)key key的hashcode值%分区数
3)没有指定key 没有指定分区 粘性
第一随机
(3)自定义分区
定义类 实现partitioner接口
5、吞吐量提高
- 批次大小 2)linger.ms 0=>5-100ms
- 压缩 4)缓存大小 32m=> 64m
6、可靠性
acks。 0 数据丢失。 1 也可能会数据丢失。 -1 完全可靠+副本大于等于2 isr>=2 数据重复。
7、数据重复
1)幂等性
<pid,分区号,序列号> 默认打开
2)事务
底层基于幂等性 初始化 启动 消费者offset 提交 终止
8、数据有序
单分区内有序(有条件)
多分区有序怎么办?
9、乱序
1)inflight=1
2)没有幂等性 inflight =1
3)有幂等性 缓存为5
三、broker
1、zk存储了哪些信息
(1)、broker.ids
(2)、leader
(3)、辅助选举 controller
2、工作流程
3、服役
1)准备一台干净服务器 2)对哪个主题操作 3)形成计划 4)执行计划 5)验证计划
4、退役
1)要退役的节点不让存储数据 2)推出节点