美文网首页
Java技术面试-Kafka

Java技术面试-Kafka

作者: GuangHui | 来源:发表于2021-07-23 21:14 被阅读0次
1. activeMq与kafka的区别
  • 吞吐量
    (1)activeMq较低,磁盘随机读写 ;
    (2)kafka较高吞吐量,内部采用消息的批量处理,数据的存储和获取是本地磁盘顺序批量读写 ;
  • 游标位置
    (1)activeMq amq来管理,无法读取历史数据;
    (2)kafka客户端自己管理,不乐意甚至重新读一遍都可以
  • HA机制(高可用)
    (1)activeMq,主从机制, 主动复制,竞争锁的方式来选举;
    (2)kafka: 和hadoop系列产品一样,分布式,由zk管理
    -容错
    (1)Kafka每个Partition的数据都会复制到几台服务器上。当某个Broker故障失效时,ZooKeeper服务将通知生产者和消费者,生产者和消费者转而使用其它Broker。

说到底,做为kafka的消费方,能感受到最大的不同还是在于几个:

(1)吞吐量确实非常高;
(2)可以重读历史数据;
(3)但是也有一些缺点:概念上比较复杂,相对于AMQ只需要知道ip和队列名你就能获得数据,Kafka使用起来非常繁琐

2. Kafka 的缺点
  • 重复消息
    Kafka 只保证每个消息至少会送达一次,虽然几率很小,但一条消息有可能会被送达多次。
  • 消息乱序
    虽然一个Partition 内部的消息是保证有序的,但是如果一个Topic 有多个Partition,Partition 之间的消息送达不保证有序。
  • 复杂性
    Kafka需要zookeeper 集群的支持,Topic通常需要人工来创建,部署和维护较一般消息队列成本更高

kafka重复消费问题的说明:

kafka在理论上的确存在重复消费的问题,比清结算平台,对接交易数据时,通过数据库主键来控制重复数据入库,而在消息中心正常情况下,也不会有消息重复,及时在偶尔在部署服务的时候,会有重复消费,也是可以接受的。

消息中心采用的同步提交:手动提交offset,防止业务处理时间过长,offset未及时提交导致重复消费

3. Kafka的基本概念(摘录)
  • (1)Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。
  • (2)Topic:一类消息,例如page view日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发。
  • (3)Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。
  • (4)Segment:partition物理上由多个segment组成。
  • (5)offset:每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset,用于partition唯一标识一条消息.
4. Kafka消费端的常用参数
Properties props = new Properties();
//zk服务器的地址  xxxx:2181
props.put("zookeeper.connect", zookeeper);
//组的名称,区别于其他group否则会接收不到数据
props.put("group.id", groupId);
props.put("zookeeper.session.timeout.ms", "8000");
props.put("zookeeper.connection.timeout.ms", "20000");
props.put("zookeeper.sync.time.ms", "2000");
props.put("auto.commit.interval.ms", "5000");
props.put("rebalance.max.retries", "5");
props.put("rebalance.backoff.ms", "60000");
props.put("auto.commit.enable", "true");
//重点参数,是否每次都从offset最前面开始读起
props.put("auto.offset.reset", "smallest");

相关文章

网友评论

      本文标题:Java技术面试-Kafka

      本文链接:https://www.haomeiwen.com/subject/lyipmltx.html