kafka是什么?
Kafka是LinkedIn开源的一款分布式消息发布和订阅系统,它的特点是高性能、高吞吐量。
kafka有什么特点?
(1)高吞吐、低延迟:kafka能达到每秒几十万的吞吐量,延迟只有几毫秒
(2)持久化:可持久化到普通磁盘上
(3)容错性:多副本
(4)横向扩展:kafka支持热扩展
(5)高并发:支持上千个客户端同时读写
kafka有哪些应用场景?
日志收集
消息系统
流式处理
kafka包含哪些组件?
broker
topic
partition
segement
offset
producer
consumer
kafka为什么这么快?
多分区
磁盘顺序写
页缓存
零拷贝
批量读写
kafka如何保证数据可靠性?
(1)副本数据同步策略
(2)ISR机制
ISR:同步副本,和leader保持同步的follower集合。如果follower长时间没有向leader同步数据,则该follower会被踢出ISR;当leader发生故障时,会从ISR中选举出一个新的leader。
(3)ack应答机制:
acks=0:不等待borker的ack, 直接返回,当borker故障时,有可能导致数据丢失。
acks=1:等待partition的leader返回ack
acks=-1(all):等待partition的leader和follower都落盘返回ack
(4)故障处理:LEO、HW
LEO:每个副本的最后一个Offset
HW:所有副本中最小的LEO
a、当follower发生故障时,follower将log文件高于HW的内容截断,从HW开始从leader同步
b、当leader发生故障时,会从ISR里选举一个follower作为新的leader,其它follower先将各自高于HW的部分截取掉,然后从新的leader同步数据
kafka能保证消息的顺序性吗?
kafka只能保证单个partition内部有序,kafka写数据时可以指定partition,将相同的key发送到同一个partition里,保证业务相同的key有序
kafka如何做性能优化?
Broker优化:
(1)配置多个不同磁盘的目录
(2)使用G1垃圾回收器
(3)网络、io操作线程数
(4)log文件刷盘时间间隔
(5)日志保留策略
Producer优化:
(1)调整写缓冲区大小
(2)消息压缩
(3)调整每批次发送request数:batch.size
(4)设置acks值
Consumer优化:
(1)调整消费的并发度
(2)每次拉取得消息大小
kafka 哪些分区策略?
写入分区策略:
(1)直接指定分区
(2)如果key不为null,则根据key的hash值选择分区
(3)如果key为null, 2.4版本之前采用的是轮训策略,2.4版本之后是采用的是黏性分区器(选择单个分区batch写满,再选择另一个)
(4)自定义分区器,实现org.apache.kafka.clients.producer.Partitioner接口
消费分区策略:
通过参数partition.assignment.strategy设置,可取值为:range、roundrobin
kafka底层存储机制?
一个partition对应一个目录,可以包含很多segment(默认大小为500M),每个segment包含两个文件:.log结尾的数据文件, .index结尾的索引文件。如:
0000000.log
0000000.index