目录:
1.ConsumerApi
2.High Level Consumer (屏蔽细节管理)
3.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

Kafka High Level API vs. Low Level API相关推荐

  1. Kafka:High level consumer vs. Low level consumer

    Kafka中的消费者有两套API,分别是high level的和low level的.两种消费方式在构造和实现上都是不同的,在此记录一下: 一.High level consumer API High ...

  2. ML-Agents与python的Low Level API通信

    本文基于我前面的文章Unity强化学习之ML-Agents的使用 参考Github链接:https://github.com/Unity-Technologies/ml-agents 参考文档:htt ...

  3. Elasticsearch java api操作(一)(Java Low Level Rest Client)

    一.说明: 一.Elasticsearch提供了两个JAVA REST Client版本: 1.java low level rest client: 低级别的rest客户端,通过http与集群交互, ...

  4. 如何使用 Elastic Search Low Level API 构造请求进行搜索

    场景: 需要在客户端构造请求调解, 调用 Elastic Search 的 API 取到结果,并且能够使用 ES 的授权机制. 方案: 一.在客户端构造 Low Level API . 二.Low L ...

  5. java bulk_Elasticsearch Java High Level REST Client(Bulk API)

    Bulk API Java High Level REST Client提供了Bulk处理器来帮助处理批量请求. Bulk请求 BulkRequest可以使用一个请求执行多个索引.更新和/或删除操作. ...

  6. Consumer设计-high/low Level Consumer

    1 Producer和Consumer的数据推送拉取方式   Producer Producer通过主动Push的方式将消息发布到Broker n Consumer Consumer通过Pull从Br ...

  7. Elasticsearch Java Low Level REST Client(通用配置)

    Elasticsearch Java Low Level REST Client(通用配置) 通用配置 正如初始化中所解释的,RestClientBuilder支持提供RequestConfigCal ...

  8. zabbix企业应用之low level discovery监控mysql

    之前介绍了使用zabbix监控固定3306端口的mysql(文章地址为http://dl528888.blog.51cto.com/2382721/1346590),有个不好的地方是只能监控固定的33 ...

  9. C++ Low level performance optimize 2

    C++ Low level performance optimize 2 上一篇 文章讨论了一些底层代码的优化技巧,本文继续讨论一些相关的内容. 首先,上一篇文章讨论cache missing的重要性 ...

最新文章

  1. Github免费中文书《Go入门指南》,带你从零学Go | 极客头条
  2. 陈道明还原度最高!AI 脑补宋明清皇帝长相,四大模型构想真实五官
  3. web前端面试题集锦三
  4. JAVA单态设计模式
  5. (四)Struts2 架构
  6. [蓝桥杯2017初赛]方格分割-dfs+思维
  7. 差异表达基因变化倍数_2020年筛个基因也还能发SCI?
  8. HDU2002 计算球体积【入门】
  9. Mybatis之分表设计与分表插入
  10. Keil μVision4软件简介
  11. android 百度 tts,百度语音TTS. android 启动时闪退
  12. Linux-虚拟机封装
  13. ps自带磨皮滤镜插件Portraiture3PS版
  14. 前端怎么把word文档转换成HTML格式
  15. SQLite读写同步之WAL机制
  16. LabWindows操作SQL SERVER
  17. node_modules删不掉
  18. quartz定时器的处理
  19. 百度云不限速详细教程
  20. 字典树学习 根据前缀词根建立字典树

热门文章

  1. SPOJ ACPC13——Increasing Shortest Path
  2. EPICS记录参考--Waveform记录(waveform)
  3. Python爬虫练习:去爬某平台音乐
  4. 快递100商家下单demo
  5. java springboot智慧农业分销平台商用
  6. python指南针_用形状文件或地质指南针绘制遮住的南极洲
  7. 处理数据库镜像问题的一个案例——数据库主体与镜像断开连接
  8. PHP和web页面交互(一)
  9. 【老生谈算法】MATLAB分形图形-树叶源码——分形图形
  10. 企鹅,大鱼,百家,头条到底那个收益高,新手该怎么来做?