kafka其他面试题

一、kafka相关概念

Broker

  Kafka集群包含一个或多个服务器,这种服务器被称为broker

Topic

  每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic;

  物理上Topic的消息分开存储,如上图topic1和topic2的消息即使在同一台机器中也是分开存储的;逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处

Partition

  Parition是物理上的概念,每个Topic包含一个或多个Partition,如上图topic1的消息分开存储在了partition0和partition1中;

Producer

  负责发布消息到Kafka broker;

Consumer

  消息消费者,向Kafka broker读取消息的客户端;

Consumer Group

  每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group);

  Consumer 是以 Consumer Group 消费者组的方式工作,由一个或者多个消费者组成一个组,共同消费一个topic。每个分区在同一时间只能由group中的一个消费者读取,但是多个group可以同时消费这个partition。如果一个消费者失败了,那么其他的 group 成员会自动负载均衡读取之前失败的消费者读取的分区;

 

二、kafka如何防止重复消费消息或者丢失消息

1,防止重复消费消息

  topic的partition中的消息消费到哪里了,由消费者提交offset来实现;

  消费者业务代码在消费消息前在数据库或redis记录offset,然后即使消费成功后没有提交offset,下次消费时会先查询数据库或redis有没有消费记录,有消费记录则不会重复消费;但是如果消费失败了,会导致消息丢失;

2,防止消息丢失

  生产者producer发送的消息在途中丢失了,可以让producer发送消息后等待响应,如果响应成功说明producer发送消息到broker成功了;

  消费者消费消息失败了,那么这个消息也丢失了;可以让消费者消费消息成功后再提交offset,但是如果消费消息成功,提交offset失败了,会导致消费者重复消费消息;在消费前记录数据库或redis但是消费失败会导致消息丢失,在消费后记录数据库或redis但是记录失败会导致消息重复消费;

3,总结

  kafka好像无法既做到防止重复消费消息,又做到防止丢失消息,只能除了做到上述说的以外,保证代码的健壮性,做好异常的捕获与处理;

 

posted @ 2021-03-02 15:15  seeAll  阅读(89)  评论(0编辑  收藏  举报