Java八股文综合常见面试题及答案Java八股文综合常见面试题及答案_java面试题-优快云博客
Kafka
152.kafka 可以脱离 zookeeper 单独使用吗?为什么?
kafka 不能脱离 zookeeper 单独使用,因为 kafka 使用 zookeeper 管理和协调 kafka 的节点服务器。
153. kafka 有几种数据保留的策略?
kafka 有两种数据保存策略:按照过期时间保留和按照存储的消息大小保留。
154. kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?
这个时候 kafka 会执行数据清除工作,时间和大小不论那个满足条件,都会清空数据。
155. 什么情况会导致 kafka 运行变慢?
1. 磁盘 I/O 瓶颈
-
原因:Kafka 依赖磁盘进行消息存储,磁盘性能不足会导致读写变慢。
-
解决方法:
-
使用高性能 SSD。
-
将日志目录(log.dirs)分布在多个磁盘上,提升并发 I/O。
-
2. 网络瓶颈
-
原因:Broker 之间或 Broker 与客户端之间的网络带宽不足或延迟过高。
-
解决方法:
-
确保网络带宽充足。
-
优化网络配置,减少延迟。
-
3. Partition 分布不均
-
原因:某些 Broker 上的 Partition 过多,导致负载不均。
-
解决方法:
-
重新分配 Partition,确保负载均衡。
-
使用
kafka-reassign-partitions.sh
工具手动调整。
-
4. Producer 配置不当
-
原因:生产者未启用批量发送或批量大小设置不合理。
-
解决方法:
-
启用批量发送并调整
batch.size
和linger.ms
参数。 -
使用异步发送减少延迟。
-
5. Consumer 配置不当
-
原因:消费者处理速度慢或并行度不足。
-
解决方法:
-
增加消费者数量或 Partition 数量。
-
优化消费者代码,提升处理效率。
-
6. GC 问题
-
原因:频繁的垃圾回收(GC)导致 Broker 或客户端暂停。
-
解决方法:
-
调整 JVM 参数,优化 GC 策略。
-
使用 G1 垃圾回收器。
-
7. Zookeeper 性能问题
-
原因:Zookeeper 集群性能不足,影响 Kafka 元数据操作。
-
解决方法:
-
确保 Zookeeper 集群的高可用性。
-
监控 Zookeeper 性能,必要时扩容。
-
8. Topic 配置不当
-
原因:Partition 数量过多或过少,Replication Factor 过高。
-
解决方法:
-
根据负载调整 Partition 数量。
-
合理设置 Replication Factor,通常为 3。
-
9. 数据保留策略不当
-
原因:日志保留时间过长或未启用压缩,导致磁盘空间不足。
-
解决方法:
-
设置合理的日志保留时间。
-
启用日志压缩(Log Compaction)。
-
10. 硬件资源不足
-
原因:CPU、内存或磁盘资源不足。
-
解决方法:
-
增加硬件资源。
-
监控资源使用情况,及时扩容。
-
11. Broker 配置不当
-
原因:Broker 配置参数不合理,如
num.network.threads
或num.io.threads
过小。 -
解决方法:
-
根据负载调整 Broker 配置参数。
-
12. 消息大小过大
-
原因:消息大小超过 Broker 或客户端的处理能力。
-
解决方法:
-
控制消息大小,避免过大。
-
调整
message.max.bytes
和replica.fetch.max.bytes
参数。
-
13. 集群负载过高
-
原因:集群负载接近或超过其处理能力。
-
解决方法:
-
扩容集群,增加 Broker。
-
优化生产者和消费者配置,减少负载。
-
14. 日志文件过多
-
原因:日志文件过多导致文件系统性能下降。
-
解决方法:
-
定期清理旧日志文件。
-
调整日志段大小(
log.segment.bytes
)和滚动时间(log.roll.hours
)。
-
156. 使用 kafka 集群需要注意什么?
1. 集群规划
-
节点数量:至少部署 3 个 Broker 以确保高可用性,避免单点故障。
-
硬件配置:Broker 需要足够的 CPU、内存和磁盘 I/O,磁盘应选择高性能 SSD。
-
网络配置:确保 Broker 之间的低延迟和高带宽网络连接。
2. Topic 和 Partition 设计
-
Partition 数量:根据吞吐量和并行度需求设置 Partition 数量,过多会增加开销,过少会影响并发性能。
-
Replication Factor:建议设置为 3,确保数据冗余和高可用性。
-
Partition 分布:均匀分布 Partition 到不同 Broker,避免负载不均。
3. 数据保留策略
-
保留时间:根据业务需求设置合理的日志保留时间,避免磁盘空间耗尽。
-
压缩策略:启用日志压缩(Log Compaction)以节省存储空间。
4. 性能优化
-
批量发送:生产者启用批量发送(Batch Size)以提高吞吐量。
-
异步发送:生产者使用异步发送以减少延迟。
-
消费者并行度:增加消费者数量或 Partition 数量以提高消费速度。
5. 监控与维护
-
监控指标:监控 Broker、Topic、Partition 的状态,关注延迟、吞吐量、磁盘使用率等。
-
日志管理:定期清理日志文件,避免磁盘空间不足。
-
版本升级:定期升级 Kafka 和依赖组件,确保安全性和性能。
6. 安全性
-
认证与授权:启用 SSL/TLS 加密和 SASL 认证,配置 ACL 控制访问权限。
-
防火墙配置:限制 Kafka 集群的访问,仅允许可信 IP 访问。
7. 容灾与备份
-
跨机房部署:在多个机房部署 Broker 以提高容灾能力。
-
数据备份:定期备份重要数据,防止数据丢失。
8. 客户端配置
-
生产者重试:配置生产者的重试机制,避免消息丢失。
-
消费者偏移量管理:合理管理消费者偏移量,避免重复消费或消息丢失。
9. Zookeeper 管理
-
Zookeeper 集群:确保 Zookeeper 集群的高可用性,避免 Kafka 集群不可用。
-
Zookeeper 监控:监控 Zookeeper 的状态,确保其稳定运行。
10. 测试与验证
-
压力测试:在生产环境前进行压力测试,确保集群能承受预期负载。
-
故障模拟:模拟 Broker 或网络故障,验证集群的容错能力。