当前位置: 首页 > article >正文

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同一个消费线程只能同事消费一个分区的消息,这样保证消费端在处理某个分区内的消息时是顺序的。如果没有足够的消费线程,让某个消费线程同时消费多个分区的线程,那么这些分区之间的顺序是无法保证的。


http://www.kler.cn/a/418056.html

相关文章:

  • 响应式编程一、Reactor核心
  • Xilinx FPGA内部资源组成和说明汇总
  • 软考高项经验分享:我的备考之路与实战心得
  • 【Python网络爬虫笔记】5-(Request 带参数的get请求) 爬取豆瓣电影排行信息
  • elastic net回归
  • 数据结构-最小生成树
  • 基于单片机的微型电子琴建模
  • ASP.NET Core 负载/压力测试
  • Python语法基础(四)
  • 多线程安全单例模式的传统解决方案与现代方法
  • 关于线扫相机的使用和注意事项
  • shell脚本练习(2)
  • Java安全—原生反序列化重写方法链条分析触发类
  • C++趣味编程玩转物联网:基于树莓派Pico控制无源蜂鸣器-实现音符与旋律的结合
  • 递归算法讲解(c基础)
  • Docker扩容操作(docker总是空间不足)
  • C#基础之预处理器,异常处理
  • 三维扫描仪-3d扫描建模设备自动检测尺寸
  • Android笔记【10】
  • 【前端开发】JS+Vuew3请求列表数据并分页
  • Spring Boot日志总结
  • 大模型开发和微调工具Llama-Factory-->WebUI
  • 架构05-架构安全性
  • 【设计模式系列】备忘录模式(十九)
  • 腾讯云助力央视总台构建国家级新媒体大数据平台
  • 网络工程师——VPN