kafka面试问题

kafka面试问题

1.如何保证 kafka 消费者消费数据是全局有序的

伪命题
每个分区内,每条消息都有一个 offset,故只能保证分区内有序。如果要全局有序的,必须保证生产有序,存储有序,消费有序。
由于生产可以做集群,存储可以分片,消费可以设置为一个consumerGroup,要保证全局有序,就需要保证每个环节都有序。
只有一个可能,就是一个生产者,一个 partition,一个消费者。这种场景和大数据应用场景相悖。

2.kafka分区的目的?

对集群来说:实现了负载均衡

对消费者和生产者来说:提高了并行度,提高效率

3.kafka是如何做到消息的有序性的?

kafka每个partition中的消息在写入的时候都是有序的,不断追加,而且单独一个partition只能由一个消费者去消费,可以在里面保证消息的顺序性.

但是分区之间的消息是不保证有序的.

4.kafka的高可靠是怎么做的?

多副本存储

producer发送数据时可配置ack=all

5.kafka的一致性

一致性就是老的leader还是新选举的leader,consumer都能读到一样的数据.

consumer只能消费到高水位线上面的数据.

高水位线就是 分区中的多个(单个)副本的最低logendoffset.

6.什么情况下会出现消息丢失?

  • topic的副本只有一个的情况下,一但这个副本所在的broker服务器宕机,则有可能丢失
  • producer往kafka写入数据时,如果消息确认机制参数!=all,则有可能丢失数据.
  • 不清洁选举机制如果开启,也可能丢失数据(不清洁选举就是说所有的ISR副本去全部宕机的情况下,可以让OSR副本成为leader,而OSR中的数据显然不全,那么就算之前的leader重新上线了,也会被进行日志截断)

7.怎么尽可能的保证kafka的可靠性?

设置副本数=3

acks=all

同步副本数>=2 min.insync.replicas>=2

8.消费者是否可以消费指定分区的消息?

可以

9.kafka消费者是否可以从指定偏移量开始消费?

可以

10.客户端操作kafka消息时采用pull模式还是push模式?

是pull模式. 拉取

如果是推送push的话,可能消费者的速度跟你推的速度不匹配

11.kafka消息格式

版本:v0,v1,v2

v1:

crc32(4B):crc32校验值。校验范围为magic至value之间。
magic(1B):消息格式版本号,此版本的magic值为0。
attributes(1B):消息的属性。总共占1个字节,低3位表示压缩类型:0表示NONE、1表示GZIP、2表示SNAPPY、3表示LZ4(LZ4自Kafka 0.9.x引入),其余位保留。
key length(4B):表示消息的key的长度。如果为-1,则表示没有设置key,即key=null。
key:可选,如果没有key则无此字段。
value length(4B):实际消息体的长度。如果为-1,则表示消息为空。
value:消息体。可以为空,比如tomnstone消息。

猜你喜欢

转载自blog.csdn.net/weixin_47699191/article/details/114130091