都有哪些特点
高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。
可扩展性:kafka集群支持热扩展
持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
高并发:支持数千个客户端同时读写
在哪些场景下会选择 Kafka?
- 日志收集
- 消息系统
- 用户活动跟踪
- 运营指标
- 流式处理
分区的目的?
实现负载均衡,提高并发
高可靠性是怎么实现的?
- 分区副本:当 Leader 挂了的时候,其中一个 follower 会重新成为新的 Leader
-
Producer:
- 提供消息确认机制,通过参数 request.required.acks 配置:0,1,all
- 提供同步配置producer.type:sync,async
- 数据一致性:只有被所有follower同步的消息才会被消费
- Leader 选举 producer 级别:acks=all(或者 request.required.acks=-1),同时发生模式为同步 producer.type=sync
topic 级别:设置 replication.factor>=3,并且 min.insync.replicas>=2;
broker 级别:关闭不完全的 Leader 选举,即 unclean.leader.election.enable=false;
Kafka 数据一致性原理
LEO、HW、LSO、LW等分别代表什么
Kafka 在什么情况下会出现消息丢失?
怎么尽可能保证 Kafka 的可靠性
数据传输的事务有几种?
最多一次,最少一次,精确的一次
Kafka消息是采用Pull模式的好处?
- 指定消费的速率
- 自主决定是否批量的从broker拉取数据
Kafka 是如何实现高吞吐率的?
顺序读写,零拷贝,文件分段,批量发送,数据压缩。