大数据 Kafka 面试题总结

kafka 总结

1、常见问题:Kafka启动后瞬间挂掉

查看是否存在脏数据(zookeeper和kafka数据目录数据都要清理)。

2、在zookeeper 上查看已启动的 kafka 节点状态;查看 topic 状态

  • 查看 kafka 数据目录

    ls -l /opt/module/kafka/datas
    
  • 查看 kafka 运行日志

    tail -n 500 /opt/module/kafka/logs/server.log
    
  • 用 kafka-producer-perf-test.sh 实际测试 producer 吞吐量参数调节

    ./kafka-producer-perf-test.sh \
    --topic test_perf \
    --num-records 100000 \
    --record-size 1000 \
    --throughput -1 \
    --producer-props \
    bootstrap.servers=hadoop102:9092
    

3、如何保证数据不丢失

1.producer 角度

  • acks=0,生产者发送过来的数据,不需要等待落盘应答,可靠性低,效率高;
  • acks=1,生产者发送过来的数据,Leader应答,可靠性中等,效率中等;
  • acks=-1,生产者发送过来的数据,Leader和ISR队列里的所有Follower 收齐数据后应答,可靠性高,效率低。

在生产环境中,acks=0很少使用;acks=1,一般用于传输普通日志,允许丢个别数据;acks=-1,一般用于传输和钱相关的数据,对可靠性要求比较高的场景。

2.broker 角度

  • 副本数大于等于2
  • min.insync.replicas 大于等于2

4、如何保证数据不重复

1.生产者角度

  • acks 设置为 -1(acks=-1)
  • 幂等性(enable.idempotence=true)+ 事务

2.broker 服务端角度

  • 分区副本大于等于2(–replication-factor 2)
  • ISR 里应答的最小副本数量大于等于2(min.insync.reolicas=2)

3.消费者

  • 事务 + 手动提交 offset(enable.auto.commit=false)
  • 消费者输出的目的地必须支持事务(MySQL、Kafka)

5、如何保证数据有序

​ Kafka 最多只保证单分区内的消息是有序的,所以如果要保证业务全局严格有序,就要设置Topic 为单分区。

如何保证单分区数据有序

​ 方案一:

​ 禁止重试,需设置以下参数

设置 retries 等于 0

​ 说明:数据出现乱序的根本原因是,失败重试,关闭重试,则可保证数据是有序的。但是这样做,可能会导致数据的丢失。

​ 方案二:

​ 启用幂等,需设置以下参数

​ 设置 enable.idempotence=true,启用幂等

​ 设置 max.in.flight.requests.per.connection,1.0.X 之后,小于等于5

​ 设置 retries,保证其大于 0

​ 设置 acks,保证其为 -1

6、如何提高 Kafka 吞吐量

1.提升生产吞吐量

  • buffer.memory:发送消息的缓冲区大小,默认值是32m,可以增加到 64m
  • batch.size:默认是 16k。如果 batch 设置太小,会导致频繁网络请求,吞吐量下降;如果 batch 太大,会导致一条消息需要等待很久才能发送出去,增加网络延时
  • linger.ms:这个值默认是 0,意思就是消息必须立即被发送。一般设置为 5-100ms。如果linger.ms设置太小,会导致频繁网络请求,吞吐量下降;如果linger.ms设置太大,会导致一条消息需要等待很久才能发送出去,增加网络延时。
  • compression.type:默认是none,不压缩,但是也可以使用 lz4 压缩,效率还是不错的,压缩之后可以减小数据量,提升吞吐量,但是会加大 producer 端的 CPU 开销。

2.增加分区

3.消费者提高吞吐量

  • 调整 fetch.max.bytes 大小,默认是 50m
  • 调整 max.poll.records 大小,默认是 500条

7、Kafka 挂掉的故障排除

​ 在生产环境中,如果某个 Kafka 节点挂掉。

​ 正常处理办法:

  • 先看日志,尝试重新启动一下,如果能重新启动,那直接解决。
  • 如果重启不行,检查内存、CPU、网络带宽。调优- >调优不行增加资源
  • 如果将 Kafka 整个节点误删除,如果副本数大于等于 2,可以按照服役新节点的方式服役一个新节点,并执行负载均衡。

8、调节 Kafka 堆内存

vim /opt/module/kafka/bin/kafka-server-start.sh

# 修改如下行
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

9、提高消费者每批次处理数据(1000条)

在消费者配置中加入如下配置:

max.poll.records=1000

10、Kafka 怎样高效读写

  • Kafka 本身是分布式集群,可以采用分区技术,并行度高
  • 读数据采用稀疏索引,可以快速定位要消费的数据
  • 顺序写磁盘
    • Kafka 的 producer 生产数据,要写入到log文件中,写的过程是一直追加到文件末端,为顺序写。官网有数据表明,同样的磁盘,顺序写能到 600M/s,而随机写只有 100K/s。这与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间。
  • 页缓存 + 零拷贝技术
    • 零拷贝:Kafka的数据加工处理操作交由Kafka生产者和消费者处理。Kafka Broker应用是不关心存储的数据,所以就不用走应用层,传输效率高。
    • PageCache 页缓存:Kafka重度依赖底层操作系统提供的 PageCache 功能。当上层有写操作时,操作系统只是将数据写入 PageCache。当读操作时,先从PageCache中查找,再去磁盘中读取。实际上PageCache是把尽可能多的空闲时间内存都当做了磁盘缓存来使用。
  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值