Java技术面试-Kafka

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Java技术面试-Kafka
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");


相关文章
|
12天前
|
安全 Java Unix
Java语言中的日期与时间处理技术
Java语言中的日期与时间处理技术
|
12天前
|
XML JSON 监控
Java语言中的正则表达式技术详解
Java语言中的正则表达式技术详解
|
12天前
|
存储 安全 Java
Java语言注解(Annotations)的技术性探索
Java语言注解(Annotations)的技术性探索
|
1天前
|
消息中间件 监控 Java
Java一分钟之-Kafka:分布式消息队列
【6月更文挑战第11天】Apache Kafka是一款高性能的消息队列,适用于大数据处理和实时流处理,以发布/订阅模型和分布式设计处理大规模数据流。本文介绍了Kafka基础,包括生产者、消费者、主题和代理,以及常见问题:分区选择、偏移量管理和监控不足。通过Java代码示例展示了如何创建生产者和消费者。理解并妥善处理这些问题,结合有效的监控和配置优化,是充分发挥Kafka潜力的关键。
7 0
|
1天前
|
Cloud Native Java Devops
【Quarkus 技术系列】「云原生架构体系」在云原生时代下的 Java“拯救者”是 Quarkus,那云原生是什么呢?
【Quarkus 技术系列】「云原生架构体系」在云原生时代下的 Java“拯救者”是 Quarkus,那云原生是什么呢?
13 3
|
6天前
|
开发框架 前端开发 JavaScript
JSP技术已死 ? (Java Server Page technology will die) ?
JSP技术已死 ? (Java Server Page technology will die) ?
10 0
|
7天前
|
存储 算法 Java
JAVA后端开发面试题库
JAVA后端开发面试题库
15 1
|
7天前
|
Java 知识图谱
Java开发技术知识图谱
Java开发技术知识图谱
11 0
|
11天前
|
缓存 安全 Java
【Java面试——并发基础、并发关键字】
随着硬件指令集的发展,我们可以使用基于冲突检测的乐观并发策略: 先进行操作,如果没有其它线程争用共享数据,那操作就成功了,否则采取补偿措施(不断地重试,直到成功为止)。这种乐观的并发策略的许多实现都不需要将线程阻塞,因此这种同步操作称为非阻塞同步。 乐观锁需要操作和冲突检测这两个步骤具备原子性,这里就不能再使用互斥同步来保证了,只能靠硬件来完成。硬件支持的原子性操作最典型的是: 比较并交换(Compare-and-Swap,CAS)。CAS 指令需要有 3 个操作数,分别是内存地址 V、旧的预期值 A 和新值 B。当执行操作时,只有当 V 的值等于 A,才将 V 的值更新为 B。
|
11天前
|
存储 机器学习/深度学习 人工智能
Java线性表技术详解与实现
Java线性表技术详解与实现
20 1

热门文章

最新文章