`
bit1129
  • 浏览: 1067780 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Kafka九】Kafka High Level API vs. Low Level API

 
阅读更多

1. Kafka提供了两种Consumer API

  • High Level Consumer API
  • Low Level Consumer API(Kafka诡异的称之为Simple Consumer API,实际上非常复杂)

在选用哪种Consumer API时,首先要弄清楚这两种API的工作原理,能做什么不能做什么,能做的话怎么做的以及用的时候,有哪些可能的问题

 

2. High Level Consumer API概述

High Level Consumer API围绕着Consumer Group这个逻辑概念展开,它屏蔽了每个Topic的每个Partition的Offset管理(自动读取zookeeper中该Consumer group的last offset )、Broker失败转移以及增减Partition、Consumer时的负载均衡(当Partition和Consumer增减时,Kafka自动进行负载均衡)

对于多个Partition,多个Consumer

  • 如果consumer比partition多,是浪费,因为kafka的设计是在一个partition上是不允许并发的,所以consumer数不要大于partition数
  • 如果consumer比partition少,一个consumer会对应于多个partitions,这里主要合理分配consumer数和partition数,否则会导致partition里面的数据被取的不均匀。最好partiton数目是consumer数目的整数倍,所以partition数目很重要,比如取24,就很容易设定consumer数目
  • 如果consumer从多个partition读到数据,不保证数据间的顺序性,kafka只保证在一个partition上数据是有序的,但多个partition,根据你读的顺序会有不同
  • 增减consumer,broker,partition会导致rebalance,所以rebalance后consumer对应的partition会发生变化
  • High-level接口中获取不到数据的时候是会block的

关于Offset初始值的问题:

先produce一些数据,然后再用consumer读的话,需要加上一句offset读取设置

 

 props.put("auto.offset.reset", "smallest"); //必须要加,如果要读旧数据

 
因为初始的offset默认是非法的,然后这个设置的意思 是,当offset非法时,如何修正offset,默认是largest,即最新,所以不加这个配置,你是读不到你之前produce的数据的,而且这个 时候你再加上smallest配置也没用了,因为此时offset是合法的,不会再被修正了,需要手工或用工具改重置offset

 

 

 

3. Low Level Consumer API概述

3.1Low Level Consumer API控制灵活性

Low Level Consumer API,作为底层的Consumer API,提供了消费Kafka Message更大的控制,如:

  • Read a message multiple times(重复读取)
  • Consume only a subset of the partitions in a topic in a process(跳读)
  • Manage transactions to make sure a message is processed once and only once(Exactly Once原语)

3.2 Low Level Consumer API的复杂性

软件没有银弹,Low Level Consumer API提供更大灵活控制是以复杂性为代价的:

Offset不再透明

Broker自动失败转移需要处理

增加Consumer、Partition、Broker需要自己做负载均衡

 

  • You must keep track of the offsets in your application to know where you left off consuming.(Offset自己管理)
  • You must figure out which Broker is the lead Broker for a topic and partition(如果一个Partition有多个副本,那么Lead Partition所在的Broker就称为这个Partition的Lead Broker)
  • You must handle Broker leader changes(Broker Leader是个什么概念)

3.3 使用Low Level Consumer API的步骤

  • Find an active Broker and find out which Broker is the leader for your topic and partition
  • Determine who the replica Brokers are for your topic and partition
  • Build the request defining what data you are interested in
  • Fetch the data
  • Identify and recover from leader changes

注意的是,使用Low Level Consumer API,没有对Broker、Consumer、Partition增减进行处理,如果出现这些的增减时,如何做负载均衡?

 

参考:

https://cwiki.apache.org/confluence/display/KAFKA/Consumer+Group+Example

https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+SimpleConsumer+Example

http://www.cnblogs.com/fxjwind/p/3794255.html

分享到:
评论

相关推荐

    Kafka_API_文档

    - **11.2.2 Low-Level Processor API** - **11.2.3 High-Level Streams DSL** #### 十二、安全迁移 **12.1 新集群** 描述了如何在一个全新的环境中设置Kafka集群。 **12.2 迁移现有集群** 提供了如何将现有集群...

    kafka-net.dll

    To that end, this project builds up from the low level KafkaConnection object for handling async requests to/from the kafka server, all the way up to a higher level Producer/Consumer classes.

    企业级消息队列Kafka视频教程

    第九章 高级(High Level)API与低级(Low Level)API 9.1 高级API 9.2 低级API 9.3 手动消费分区数据 第十章 监控工具Kafka-eagle介绍 10.1 Kafka-Eagle简介 10.2 安装Kafka-Eagle 10.3 Kafka度量指标 第十一章 ...

    kafka开发文档

    Kafka Streams提供了一种高级的API来构建流处理应用,这些API包括了Low-Level Processor API和High-Level Streams DSL。 通过上述内容的介绍,可以发现Kafka的设计目标和实现细节涵盖了消息系统的关键方面。无论是...

    Kafka面试专题.zip

    - **Low-Level Consumer API**:提供更多的控制,但需要手动管理offset。 9. **安全机制** Kafka支持SSL/TLS加密和SASL认证,确保数据传输和访问的安全。 10. **监控与调优** - 使用Kafka的监控指标来评估性能...

    20223 Kafka精选面试题50道

    - 消费者接口有两种:Low-level API 和 High-level API。High-level API 可能会导致消息丢失,因为消费者可能会在提交 offset 后挂掉,未处理的消息将被跳过。解决方法包括使用同步模式和合适的确认机制,以及在...

    wallet-payment-system-low-level-design

    在Java中,可以使用Spring Boot框架来构建服务,使用RabbitMQ或Kafka作为消息队列,实现异步处理,提高系统吞吐量。交易的并发控制则依赖于乐观锁或分布式锁,如Redis Lock,防止并发问题。 4. **支付网关集成**:...

    jocko:Kafka通过内置协调在Golang中实现(无需ZooKeeper,单个二进制安装,Cloud Native)

    将所有依赖关系和代码更新为最新的Go(截至MAR2020)读项目布局├── broker broker subsystem├── cmd commands│ └── jocko command to run a Jocko broker and manage topics├── commitlog low-level ...

    Pro Spark Streaming(Apress,2016)

    Low-level details of discretized streams The application and vitality of streaming analytics to a number of industries and domains Optimization of production-grade deployments of Spark Streaming via ...

Global site tag (gtag.js) - Google Analytics