Kafka核心技术与实战
胡夕
人人贷计算平台部总监,Apache Kafka Contributor
立即订阅
8408 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么要学习Kafka?
免费
Kafka入门 (5讲)
01 | 消息引擎系统ABC
02 | 一篇文章带你快速搞定Kafka术语
03 | Kafka只是消息引擎系统吗?
04 | 我应该选择哪种Kafka?
05 | 聊聊Kafka的版本号
Kafka的基本使用 (3讲)
06 | Kafka线上集群部署方案怎么做?
07 | 最最最重要的集群参数配置(上)
08 | 最最最重要的集群参数配置(下)
客户端实践及原理剖析 (14讲)
09 | 生产者消息分区机制原理剖析
10 | 生产者压缩算法面面观
11 | 无消息丢失配置怎么实现?
12 | 客户端都有哪些不常见但是很高级的功能?
13 | Java生产者是如何管理TCP连接的?
14 | 幂等生产者和事务生产者是一回事吗?
15 | 消费者组到底是什么?
16 | 揭开神秘的“位移主题”面纱
17 | 消费者组重平衡能避免吗?
18 | Kafka中位移提交那些事儿
19 | CommitFailedException异常怎么处理?
20 | 多线程开发消费者实例
21 | Java 消费者是如何管理TCP连接的?
22 | 消费者组消费进度监控都怎么实现?
深入Kafka内核 (5讲)
23 | Kafka副本机制详解
24 | 请求是怎么被处理的?
25 | 消费者组重平衡全流程解析
26 | 你一定不能错过的Kafka控制器
27 | 关于高水位和Leader Epoch的讨论
管理与监控 (12讲)
28 | 主题管理知多少?
29 | Kafka动态配置了解下?
30 | 怎么重设消费者组位移?
31 | 常见工具脚本大汇总
32 | KafkaAdminClient:Kafka的运维利器
33 | Kafka认证机制用哪家?
34 | 云环境下的授权该怎么做?
35 | 跨集群备份解决方案MirrorMaker
36 | 你应该怎么监控Kafka?
37 | 主流的Kafka监控框架
38 | 调优Kafka,你做到了吗?
39 | 从0搭建基于Kafka的企业级实时日志流处理平台
高级Kafka应用之流处理 (3讲)
40 | Kafka Streams与其他流处理平台的差异在哪里?
41 | Kafka Streams DSL开发实例
42 | Kafka Streams在金融领域的应用
结束语 (1讲)
结束语 | 以梦为马,莫负韶华!
特别放送 (2讲)
加餐 | 搭建开发环境、阅读源码方法、经典学习资料大揭秘
用户故事 | 黄云:行百里者半九十
Kafka核心技术与实战
登录|注册

12 | 客户端都有哪些不常见但是很高级的功能?

胡夕 2019-06-29
你好,我是胡夕。今天我要和你分享的主题是:客户端都有哪些不常见但是很高级的功能。
既然是不常见,那就说明在实际场景中并没有太高的出场率,但它们依然是很高级很实用的。下面就有请今天的主角登场:Kafka 拦截器。

什么是拦截器?

如果你用过 Spring Interceptor 或是 Apache Flume,那么应该不会对拦截器这个概念感到陌生,其基本思想就是允许应用程序在不修改逻辑的情况下,动态地实现一组可插拔的事件处理逻辑链。它能够在主业务操作的前后多个时间点上插入对应的“拦截”逻辑。下面这张图展示了 Spring MVC 拦截器的工作原理:
拦截器 1 和拦截器 2 分别在请求发送之前、发送之后以及完成之后三个地方插入了对应的处理逻辑。而 Flume 中的拦截器也是同理,它们插入的逻辑可以是修改待发送的消息,也可以是创建新的消息,甚至是丢弃消息。这些功能都是以配置拦截器类的方式动态插入到应用程序中的,故可以快速地切换不同的拦截器而不影响主程序逻辑。
Kafka 拦截器借鉴了这样的设计思路。你可以在消息处理的前后多个时点动态植入不同的处理逻辑,比如在消息发送前或者在消息被消费后。
作为一个非常小众的功能,Kafka 拦截器自 0.10.0.0 版本被引入后并未得到太多的实际应用,我也从未在任何 Kafka 技术峰会上看到有公司分享其使用拦截器的成功案例。但即便如此,在自己的 Kafka 工具箱中放入这么一个有用的东西依然是值得的。今天我们就让它来发挥威力,展示一些非常酷炫的功能。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Kafka核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(27)

  • 风中花
    胡老师您好! 我公司现在就我一个人懂点kafka,但是公司线下却有使用kafka,现在知道我学习这个就交给我了,我现在遇到一个线上问题:消息经常堆积起来,不能消费了,重启服务就能继续消费了。我目前得能力还搞不定,望老师能给指点一二 。谢谢。谢谢

    作者回复: 消息堆积可能原因如下:1. 生产速度大于消费速度,这样可以适当增加分区,增加consumer数量,提升消费TPS;2. consumer消费性能低,查一下是否有很重的消费逻辑(比如拿到消息后写HDFS或HBASE这种逻辑就挺重的),看看是否可以优化consumer TPS;3. 确保consumer端没有因为异常而导致消费hang住; 4. 如果你使用的是消费者组,确保没有频繁地发生rebalance

    主要排查下可能是哪些原因

    2019-07-04
    2
    15
  • 落霞与孤鹜
    这个问题和这期的内容没关系😓。

    如果一个主题,由一个应用的名为A的消费组消费,然后把消费组名改为B,重新发布应用,这个时候是不是从主题的分区头开始消费?如何保证从上次A消费组的最新偏移量处开始消费?

    作者回复: 我假设你指的名字是group.id。那么把A改成B对于Kafka而言就是新的consumer。新consumer从头还是从最新开始消费取决于auto.offset.reset的设置

    2019-06-30
    5
  • Lei@时速云
    👍 胡总出专栏了

    作者回复: 磊总别闹:)

    2019-06-29
    2
  • 小头针
    我们的应用场景是这样的,将采集到的数据接收到kafka,并由kafka再进行生产供下一逻辑消费,消费的数据进行一些业务的修改,最后进入到查询平台中,但是经常会出现采集端的数据与查询端的数据量相差较大的情况,所以我们就简单的统计了数据写入到redis中。

    胡老师,请问Interceptor可以对生产者生产的数据以及消费者消费的数据进行统计么?


    作者回复: 可以啊,你想在里面实现什么样的逻辑都行。

    2019-07-05
    1
  • 张庆
    return null ; 报错了,NullPointException错误,KafkaProducer doSend方法里面获取消息主题和分区。
    2019-07-02
    1
    1
  • Liam
    请问下老师。onsend或onconsumer的执行线程和发送或消费消息的线程是否是同一个线程?加入太多耗时逻辑是否会影响主逻辑?

    作者回复: onsend是producer进程下的线程;onConsume是consumer进程下的线程,它们不是一个进程。我说的是onSend和onAcknowledgement是一个进程下的多个线程。

    2019-06-29
    1
  • 进击的姬哥
    Interceptor处理数据是单条的吗,还是多条数据作为一个集合

    作者回复: 单条消息

    2019-11-23
  • James
    不知道是kafka问题还是项目问题= =
    2019-11-13
  • James
    老师,刚才的问题描述,线上环境只有一个消费组消费,看异常好像是一个分区坏了,导致重新平衡.才导致挂了

    作者回复: 嗯嗯,分区坏了?

    2019-11-13
  • James
    请问老师无法完成提交,是因为重新平衡,是什么原因才会导致.
    刚接触不久,就要修改线上环境问题.但是一直跑了一小时就会下面问题,然后oom
    Group coordinator rl-hadoop5.gci.com:9092 (id: 2147483646 rack: null) is unavailable or invalid, will attempt rediscovery


    Offset commit failed on partition dispatch_bus-1 at offset 28978632: The coordinator is not aware of this member.


    Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member. This means that the time between subsequent calls to poll() was longer than the configured max.poll.interval.ms, which typically implies that the poll loop is spending too much time message processing. You can address this either by increasing the session timeout or by reducing the maximum size of batches returned in poll() with max.poll.records.

    作者回复: 我的经验是先解决OOM的问题吧。至于commit 失败,通常是因为事件处理的速度太慢了

    2019-11-13
  • 此方彼方Francis
    老师好,在kafka的interceptor里面实现权限控制的逻辑合适吗?
    假设说有另外一个服务维护了IP和topic之间的关系,在interceptor里面线获取到本机ip有权限的topic列表,然后每次发消息的时候做判断。

    作者回复: Kafka本身也提供了一整套权限控制的逻辑。当然如果你这么用能满足你的需求,我觉得没有任何问题:)

    2019-10-28
  • 我已经设置了昵称
    老师,遇到个问题, 自己建了个consumer的interceptor,需要在interceptor中收到消息后,发送响应消息给发送方,但发现interceptor这个实例并没有被spring管理起来,就需要自己再new一个producer。但这个kafka配置又是配置在配置中心,也读不到,只能写死了。有啥好的方法吗

    作者回复: 可以复用你在Spring中创建的producer吗?

    2019-09-24
    1
  • godtrue
    胡老师好,请教两个小问题
    1:broker通过网络拿到消息后,落盘的规则是什么?来一条消息就落盘一条?还是积攒够一定的量再落盘?
    2:从追主,新的消息是主主动推给各个从的?还是从主动拉取的?如果是主动拉取,从怎么知道主有新的消息的?另外,同步的时候是只要有一条新消息就同步嘛?
    如果其他同学清楚,也请帮忙解答一下,多谢。

    作者回复: 1. 实际上这个交由OS来决定,Kafka不管
    2. 从拉取的方式。Kafka定义了水位的概念来标识拉取的进度

    2019-08-14
  • 小可
    老师好,有个场景想请教下。我们发送的数据是个大json,大概500K,有一百多的字段,其中一个字段450K是图片base64,发送的速度不到100条/秒,像这种大消息体数据的发送,kafka有什么好的办法么?

    作者回复: 没什么太好的方法。你可以试试压缩。其实消息队列本不适合发送太大的消息体

    2019-08-01
    2
  • 撒旦的堕落
    我看到老师回答的onsend 和onAcknowledgement是生产者进程下的不同线程 既然都是子线程 为啥又特意提到onAcknowledgement这个方法又处在发送的主路径中 难道是源码中对这两个方法的调用有区别?

    作者回复: 这两个方法是在不同的线程中被调用的

    2019-07-31
  • 杨陆伟
    System.currentTimeMillis() - record.timestamp() 是否要求生产客户端设置record的timestamp字段?还是Producer Client会自动生成?对于Kafka中的timestamp还搞不太清楚,这对监控比较关键,不知道后面有没有介绍,谢谢

    作者回复: 默认情况下是消息发生时producer程序所在机器时钟

    2019-07-19
  • 风中花
    又看了一次!
    2019-07-09
  • October
    请问老师,kafka Interceptor可以对客户端做哪些监控?可以举个例子吗?

    作者回复: 类似于埋点的逻辑。可以在消息处理(发送或消费)的 各个环节埋一些你在意的统计逻辑进去

    2019-07-04
  • mellow
    拦 截 器可以支持在服务端boker吗

    作者回复: 不支持

    2019-07-03
  • Geek_Sue
    胡老师,我想问下您文中的例子,在onConsume的时候,是否会存在这一时刻Producer仍然在发送消息,然后totalSentMessage这个值拿到的偏小,并不完全准确呢?

    作者回复: 事实上,即使不用Kafka的拦截器,这种计数类的指标也可能有些许的不准确,不过应该没关系吧。

    2019-07-01
收起评论
27
返回
顶部