java-kafka面试相关基础题目整理01
1.kafka是一个分布式流处理平台,核心功能包括消息队列,流处理,和数据集成。它的特点包括高吞吐量,低延迟,可扩展和高容错性;
2.主要应用场景有:
1>.消息队列:用作高吞吐量的消息系统,将消息从一个系统传递到另一个系统
2>.日志收集:集中收集日志数据,然后通过kafka传递到实时监控系统或存储系统
3>.流处理:处理实时数据流,将数据传递给实时计算系统,如Flink
3.kafka主要归功于其独特的设计:首先kafka采用分区和副本的策略,每个主题分成多个分区,
每个分区可以有多个副本,这样即使某些节点出现故障,仍然可以保证数据的高可用性和持久性,也可以轻松应对大量数据的并发写入和读取;
kafka的高吞吐量和低延迟得益于其高效的I/O模型,kafka将数据的写入操作进行顺序追加,避免了磁盘的随机读写,极大提高了写入性能。此外采用了零拷贝的技术,大幅提升数据传输效率,降低了延迟;
流处理方面,它有强大的流处理api,kafka streams,这个api允许开发者使用简单的编程模型创建复杂的流处理应用,而不必依赖外部独立的流处理框架;
4.kafka的基本架构包括4个组件:producer生产者,consumer消费者,broker消息代理,zookeeper协调器
生产者负责将数据发布到kafka的特定topic上,consumer从kafka的topic中读取数据,borker是kafka 的核心,消息在这里存储和管理,每个kafka集群可以包含1个或者多个broker,负责接收,存储以及发送数据;
工作机制:
producer机制:通常将数据作分区,以便灵活分配负载,我们可以选择轮询机制,基于键的分区机制或者自定义分区机制,为了提高性能producer会使用批量发送策略和压缩技巧
consumer机制:订阅一个或者多个topic并从中消费数据,在消费组内,kafka会保证同一个分区的数据不会同时被多个消费者读取,这样可以平衡负载,还有一种常用模式是“按需消费”,即通过offset确保数据可以按顺序处理;
broker:每个broker负责维护其分配到的分区副本,保证数据的高可用和可靠性,当某个broker挂了,其他broker会接管它的工作,同时kafka采集逻辑来平衡分区数据,避免某个broker负载过重;
zookeeper:是kafka用来进行集群管理和leader选举的,leader管理者分区的写入操作,而follower则同步数据以保证一致性。如果leader挂掉zookeeper会选举新的leader确保系统继续运转,
关于性能优化的建议:
1>适当增加分区数,以更好的负载均衡,但注意分区数过多会增加管理成本
2>选择适合的压缩方式如snappy,在减少存储空间的同事还可以提高吞吐量
3>配置争取的内存和磁盘参数;
5.kafka的Topic
topic是消息系统重的逻辑概念,它是用来区分和隔离不同类型消息的单位,每个topic都有一个名称,生产者将消息发送到某个特定的topic上,主要作用包括:
1)消息分类:通过topic对消息进行分类管理,生产者和消费者通过topic组织和订阅消息
2)隔离数据:不同业务或模块的数据可通过不同的topic隔离,保证数据的独立性和安全
3)分区并行 每个topic可以有多个分区,消息会分布到不同分区,实现并行处理提示吞吐量
6.Kafka 中,Partition 是什么?Partition 的划分对性能有什么影响?
partition是指一个topic中的一个分区,topic中可以划分为多个分区,每个分区是一个有序的,不可变的消息序列,不同分区中的消息是并行存储和处理的,这使得kafka能够实现高吞吐量。
partition划分对性能影响:
1)并行处理:更多的分区可以让多个消费者实例并行处理消息,提升系统的吞吐量
2)负载均衡:通过增加分区数量 更好的分配负载 避免某个节点成为瓶颈
7.kafka如何保证消息的顺序性?
1)分区机制:kafka中每个topic都可以配置为多个分区,每个分区都是一个有序的,不可变的消息日志,生产者发送消息时,执行消息的key,kafka根据key来进行哈希运算,将消息写入相应的分区。同一key 的消息总会被写入到同一个分区,这样保证同一个key消息在同一个分区内事有序
2)消息的key和分区策略:生产者发送消息时可通过配置分区策略决定去哪个分区,默认分区策略是局域消息键的哈希值,这个策略确保下同的键被发送到同一个分区,保证他们的顺序。
3)消费端的顺序:在消费消息时,consumer同一个消费线程只能同事消费一个分区的消息,这样保证消费端在处理某个分区内的消息时是顺序的。如果没有足够的消费线程,让某个消费线程同时消费多个分区的线程,那么这些分区之间的顺序是无法保证的。