mian>>理论侧
书籍名称【Kafka权威指南】
链接:https://pan.baidu.com/s/11YqDDICWwQAHC4bKhwHMKg
提取码:vgz7
个人笔记:
Kafka权威指南
第 1 章 初识Kafka
>>Apache Avro
>>Kaflca 的悄息通过主题进行分类。
>>先入先出的顺序读取。
>>MirrorMaker
使用场景
1 活动跟踪
2 传递消息
3 度量指标和日志记录
4 提交日志
5 流处理
常规配置
1> broker.id
标识,整数,默认0,唯一
2> port
3> zookeeper.connect
用于保存 broker 元数据的 Zookeeper 地址。
4> log .dirs
5> num.recovery.threads.perdata.dir
对于如下3种情况, Kafka 会使用可配置的钱程 来处理日志片段
5.1 服务器正常启动,用于打开每个分区的日志片段
5.2服务器崩愤后重启,用于检查和截短每个分区的日志片段:
5.3服务器正常关闭,用于关闭日志片段。
6> auto.create.topics.enable
默认情况下, Kafka 会在如下几种情形下自动 建主题
6.1 当一个生产者开始往主题写入消息时
6.2 当一个消费者开始从主题读取消息时
6.3 任意 个客户端向主题发送元数据请求时。
主题的默认配置
1> num.partitions
参数指定了新创建的主题将包含多少个分区,默认1
2> log.retention.ms
Kafka 通常根据时间来决定数据可以被保留多久。默认使用 log. retentlon.hours 参数来配
置时间 ,默认值为 168 小时。
3>log.retention.bytes
4>log.segment.bytes
5>log.segment.ms
6>message.max.bytes
broker 通过设置message.max.bytes 参数来限制单个消息的大小,默认值是1MB
第 2 童 安装 Kafka
第 3 章 Kafka 生产者一一向 Kafka 写入数据
Kafka 发送消息的主要步骤:
Kafka 生产者有3个必选的属性
1 bootstap.severs:该属性指定 broker 的地址清单。
2 key.serializer:默认提供ByteArraySerializer/StringSerializer/IntegerSerializer
3 value.Serializer
发送消息
1 发送并忘记
2 同步发送
3 异步发送
生产者的配置
序号 | 配置名称 | 配置说明 | 配置取值 | |
1 | acks | 参数指定了必须要有多少个分区副本收到消息 | 0/1/all | |
2 | buffer.memory | 该参数用来设置生产者内存缓冲区的大小,生产者用它缓冲要发送到服务器的消息 | ||
3 | compression.type | 默认情况下,消息发送时不会被压缩 | snappy/gzip/lz4 | |
4 | retries | |||
5 | batch.size | |||
6 | linger.ms | |||
7 | client.id | |||
8 | max.in.flight.requests.per.connection | 指定了生产者在收到服务器晌应之前可以发送多少个消息 | ||
9 | timeout.ms/request.timeout.ms/ metadata.fetch.timeout.ms | |||
10 | max.block.ms | |||
11 | max.request.size | |||
12 | receive.buffer.bytes/send.buffer.bytes | |||
>>键有两个用途 :
可以作为消息的附加信息,也可以用来决定消息该被写到主题的哪个分区
>>不要让消费者的数量超过主题分区的数量,多余的消费者只会被闲置
>>Confluent Schema Registry
第 4 章 Kafka 消费者一一从 Kafka读取数据
>>Partitioner
>>分区的所有权从一个消费者转移到另一个消费者,这样的行为被称为再均衡。
>>subscribe
>>一旦消费者订阅了主题,轮询就会处理所有的细节,包括群组协调、分区再均衡、发送心跳和获取数据,
消费者配置
序号 | 配置名称 | 配置说明 | 取值 | |
1 | fetch.min.bytes | 该属性指定了消费者’从服务器获取记录的最小字节数。 | ||
2 | fetch.max.wait.ms | 默认500ms | ||
3 | max.partition.fetch.bytes | 该属性指定了服务器从每个分区里返回给消费者的最大字节数。 | 它的默认值是 lMB | |
4 | session.timeout.ms | 默认:3秒 | ||
5 | auto.offset.reset | 该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下(因消费者长 时间失效,包含偏移量的记录已经过时井被删除)该作何处理 | 默认:latest | |
6 | enable.auto.commit | 该属性指定了消费者是否自动提交偏移量, | 默认值是 true | |
7 | partition.assignment.strategy | Range/RoundRobin | ||
8 | client.id | |||
9 | max.poll.records | |||
10 | receive.buffer.bytes | |||
11 | send.buffer.bytes |
退出
consumer.wakeup()是消费者唯一 一个可以从其他线程里安全调用的方法。
第 5 章 深入Kafka
“脑裂”是指两个节点同时认为自己是 当前的控制器。
Kafka 使用零复制技术向客户端发送消息
第 6 章 可靠的数据传递
消费者的可靠性配置
1>group.ld
2>auto.offset.reset
3>enable.auto.commit
4>auto.commit.interval.ms
第 7 章 构建数据管道
第 8 章 跨集群数据镜像
Kafka 内置的跨集群复制工具叫作 MirrorMaker
跨集群镜像使用场景
- 区域集群和中心集群
- 冗余
- 云迁移
双活架构
生产者进行调优,可以使用下列参数。
1>max.in.flight.requests.per.connection
2>linger.ms
3>batch.size
配置用于提升消费者的吞吐量:
1>range
2>fetch.max.bytes
3>fetch.min.bytes
4>fetch.max.wait
第 9 章 管理 Kafka
第 1 0 章 监控 Kafka
第 1 1 章 流式处理
面试题:
1-kafka快的原因:
>>partition并行处理
>>顺序写磁盘,充分利用磁盘特性
>>利用了现代操作系统分页存储 Page Cache来利用内存提高I/O效率
>>采用了零拷贝技术
>>Producer生产的数据持久化到broker,采用 mmap文件映射,实现顺序的快速写入
>>Customer从 broker读取数据,采用sendfile,将磁盘文件读到OS内核缓冲区后,转到NIO buffer进行网络发送,减少C
使用MQ消息中间件:
主要应用场景:解耦、异步、削峰
不足:
系统可用性降低/系统复杂性增加
分类
ActiveMQ/RabbitMQ/RocketMQ/Kafka/ZeroMQ
中小型软件公司,建议选RabbitMQ
大型软件公司,根据具体使用在rocketMq和kafka之间二选一
rabbitmq
AMQP
>>协议:
Module Layer:协议最高层,主要定义了一些客户端调用的命令,客户端可以用这些命令实现自己的业务逻辑。
Session Layer:中间层,主要负责客户端命令发送给服务器,再将服务端应答返回客户端,提供可靠性同步机制和错误处理。
TransportLayer:最底层,主要传输二进制数据流,提供帧的处理、信道服用、错误检测和数据表示等
>>组件
交换器/队列/绑定
>>确保消息的可靠性
1>生产者到RabbitMQ:事务机制和Confirm机制,
注意:事务机制和 Confirm 机制是互斥的,两者不能共存,会导致 RabbitMQ 报错。
2>RabbitMQ自身:持久化、集群、普通模式、镜像模式。
3>RabbitMQ到消费者:basicAck机制、死信队列、消息补偿机制
>>死信原因
消息被拒(Basic.Reject /Basic.Nack) 且 requeue = false。
消息TTL过期。
队列满了,无法再添加
RabbitMQ 有三种模式:单机模式,普通集群模式,镜像集群模式
PU消耗