自己在使用Spring Kafka 的消费者消费消息的时候的实践总结: 接口 KafkaDataListener 是spring-kafka提供的一个供消费者接受消息的顶层接口,也是一个空接口; public interface KafkaDataListener<T> {} 对于消费端接收消息的时候,spring-kafka的设计思路是,提供一个顶层接口,提供两个子类,一个子类是自动提交offset的,另一个子类是手动提交offset的. 无论是自动提交offset还是手动提交offset,…
系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践(四)spring-kafka消费者源码 kafka原理和实践(五)spring-kafka配置详解 kafka原理和实践(六)总结升华 ==============正文分割线===================== 一.kafkaConsumer消费者模型 如上图所示,spring-kafka消费…
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.or…
spring-kafka的官方文档介绍,可以知道自1.1版本之后, @KafkaListener开始支持批量消费,只需要设置batchListener参数为true 把application.yml中的enable-auto-commit设置为false,设置为不自动提交   @Bean public KafkaListenerContainerFactory<?> batchFactory(ConsumerFactory consumerFactory){ ConcurrentKafkaLi…
生产者每次调用poll()方法时,它总是返回由生产者写入Kafka但还没有消费的消息,如果消费者一致处于运行状态,那么分区消息偏移量就没什么用处,但是如果消费者发生崩溃或者有新的消费者加入群组,就会触发再均衡,完成再均衡之后,每个消费可能分配到新的分区,而不是之前处理的那个,为了能够继续之前的工作,消费者需要读取每个分区最后一次提交的偏移量,然后从偏移量制定的地方开始工作.消费者会往一个__consumer_offser的主题发送消息,消息里包含每个分区的偏移量. 1.同步提交 import o…
KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力的主要方式. 我们有必要为主题创建大量的分区,在负载增长时可以加入更多的消费者.不要让消费者的数量超过主题分区的数量,多余的消费者只会被闲置.  除了通过增加消费者来横向伸缩单个应用程序外,还经常出现多个应用程序从同一个主题读取数据的情况. Kafka 设计的主要目标之一 ,就是要让 Kafka 主…
温馨提示:整个 Kafka 专栏基于 kafka-2.2.1 版本. 1.KafkaConsumer 概述 根据 KafkaConsumer 类上的注释上来看 KafkaConsumer 具有如下特征: 在 Kafka 中 KafkaConsumer 是线程不安全的. 2.2.1 版本的KafkaConsumer 兼容 kafka 0.10.0 和 0.11.0 等低版本. 消息偏移量与消费偏移量(消息消费进度) Kafka 为分区中的每一条消息维护一个偏移量,即消息偏移量.这个偏移量充当该分区…
上面两篇聊了Kafka概况和Kafka生产者,包含了Kafka的基本概念.设计原理.设计核心以及生产者的核心原理.本篇单独聊聊Kafka的消费者,包括如下内容: 消费者和消费者组 如何创建消费者 如何消费消息 消费者配置 提交和偏移量 再均衡 结束消费 消费者和消费者组 概念 Kafka消费者对象订阅主题并接收Kafka的消息,然后验证消息并保存结果.Kafka消费者是消费者组的一部分.一个消费者组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息.消费者组的设计是对消费者进行的一…
1.Offset Topic Consumer通过提交Offset来记录当前消费的最后位置,以便于消费者发生崩溃或者有新的消费者加入消费者组,而引发的分区再均衡操作,每个消费者可能会分到不同的分区.我测试的kafka版本是:0.11.0.2,消费者往一个特殊的主题"_consumer_offset"发送消息,如图: 消息的内容包括: fields content Key Consumer Group, topic, partition Payload Offset, metadata,…
第一部分:kafka概述 一.定义(消息引擎系统) 一句话概括kafka的核心功能就是:高性能的消息发送与高性能的消息消费. kafka刚推出的时候是以消息引擎的身份出现的,它具有强大的消息传输效率和完备的分布式解决方案,随着版本更新,在kafka0.10.0.0版推出了流式处理组件--Kafka Streams,使kafka交由下游数据处理平台做的事也可以自己做,自此kafka在消息引擎的基础上正式成为了一个流式处理框架.但无论是消息引擎还是流式处理平台,kafka的处理架构从未质变,概括如下…
了解了什么是kafka( https://www.cnblogs.com/tree1123/p/11226880.html)以后 学习核心api之消费者,kafka的消费者经过几次版本变化,特别容易混乱,所以一定要搞清楚是哪个版本再研究. 一.旧版本consumer 只有旧版本(0.9以前)才有 high-level consumer 和 low-level consumer之分,很多的文章提到的就是这两个:低阶消费者和高阶消费者,低阶消费者更灵活但是需要自己维护很多东西,高阶就死板一点但是不需…
文章目录 一.什么是Kafka 二.Kafka的基本使用 1. 单机环境搭建及命令行的基本使用 2. 集群搭建 3. Java API的基本使用 三.Kafka原理浅析 1. topic和partition的存储 2. 消息分段及索引查找原理 3. 日志清理策略 4. 副本高可用机制 5. 数据同步原理 6. 消息分发策略 7. 消费原理 一.什么是Kafka Kafka也是一款消息队列中间件,与ActiveMQ和RabbitMQ不同的是,它不是基于JMS和AMQP规范开发的,而是提供了类似JM…
一.消息队列概述 1.1.消息队列由来 在运维场景中,我们经常会存在如下场景:一旦出现S1异常,C1将因为S1的影响而异常(C为客户端,s为服务端) 当然可以通过添加多个S的方式,实现高可用.但这样会变得难以维护,每增加一个S所有的C都要进行调整,增加了耦合性(软件开发强调高内聚低耦合) 可以通过在C和S之间添加负载均衡来达到降低耦合度的效果,但是在流量高峰期C1收到的压力,仍然会传递到后端S.如果S处理处理不过来可能就会导致异常(一般情况下前端的接收请求的速度是较快的,但是后端处理请求的速录会…
使用方式 创建一个 KafkaConsumer 对象订阅主题并开始接收消息: Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); properties.setProperty("key.deserializer", "org.apache.kafka.common.serializ…
每日一句 军人天生就舍弃了战斗的意义! 概述 RabitMQ 发布确认,保证消息在磁盘上. 前提条件 1.队列必须持久化 队列持久化 2.队列中的消息必须持久化 消息持久化 使用 三种发布确认的方式: 1.单个发布确认 2.批量发布确认 3.异步批量发布确认 开启发布确认的方法 //创建一个连接工厂 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("127.0.0.1"); factory.set…
作者:jiangzz 电话:15652034180 微信:jiangzz_wx 微信公众账号:jiangzz_wy 背景介绍 流计算:将大规模流动数据在不断变化的运动过程中实现数据的实时分析,捕捉到可能有用的信息,并把结果发送到下一计算节点. 主流流计算框架:Kafka Streaming.Apache Storm.Spark Streaming.Flink DataStream等. Kafka Streaming:是一套基于Kafka-Streaming库的一套流计算工具jar包,具有简单容易…
在kafka的消费者中,有一个非常关键的机制,那就是offset机制.它使得Kafka在消费的过程中即使挂了或者引发再均衡问题重新分配Partation,当下次重新恢复消费时仍然可以知道从哪里开始消费.它好比看一本书中的书签标记,每次通过书签标记(offset)就能快速找到该从哪里开始看(消费). Kafka对于offset的处理有两种提交方式:(1) 自动提交(默认的提交方式)   (2) 手动提交(可以灵活地控制offset) (1) 自动提交偏移量: Kafka中偏移量的自动提交是由参数e…
-Kafka是一个分布式的( distributed ).分区的( partitioned ).复制的( replicated )提交日志( commitlog )服务 . “分布式”是所有分布式系统的特性 :“分区”指消息会按照分区分布在集群的所有节点上 :“复制”指每个分区都会有多个副本存储在不同的节点上:“提交日志”指新的消息总是以追加的方式进行存储. 写到提交日志的目的是防止节点宕机后,因内存中的数据来不及刷写到磁盘而导致数据丢失 . 分布式存储系统除了提交日志,一般还有真正的数据存储格…
在0.10版本之前, Kafka仅仅作为一个消息系统,主要用来解决应用解耦. 异步消息 . 流量削峰等问题. 在0.10版本之后, Kafka提供了连接器与流处理的能力,它也从分布式的消息系统逐渐成为一个流式的数据平台 . Kafka 流式数据平台 作为一个流式数据平台,最重要的是要具备下面3个特点 . 类似消息系统,提供事件流的发布和订阅,即具备数据注入功能 : 存储事件流数据的节点具有故障容错的特点,即具备数据存储功能 : 能够对实时的事件流进行流式地处理和分析,即具备流处理功能 . Kaf…
kafka shutdown停止很慢问题 在数据量大的时候,consumer一次抓取数据的数据很多,进入到业务处理的数据可能有很多, 假设一次poll有1万条数据进入业务程序,而且业务程序是和poll绑定在一起线程同步执行的,假设平均每条数据,执行业务程序花费100ms, 那么poll一次的数据,至少要执行 1w*0.1s = 1000s = 16.67分钟. 所以,在数据量大的时候,停止一个线程(需要先等待业务程序处理完数据),可能要十几分钟. shutdown问题解决方案 1.改成异步处理数…
目录 一. kafka简介二. Kafka架构方案三. Kafka安装四. Kafka Client API 4.1 Producers API 4.2 Consumers API 4.3 消息高可靠 At-Least-Once 4.4 消息高可靠Consumer 4.5 生产者.消费者总结五. Kafka运维 5.1 Broker故障切换 5.2 Broker动态扩容 5.2.1 增加分区 5.2.2 增加Broker Server 5.3 Kafka配置优化 5.4 数据清理 5.4.1 数…
本教程假定您是一只小白,没有Kafka 或ZooKeeper 方面的经验. Kafka脚本在Unix和Windows平台有所不同,在Windows平台,请使用 bin\windows\ 而不是bin/, 并将脚本扩展名改为.bat. 1.   Kafka概述 1.1.      消息队列 (1)点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除) 点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端.这个模型的特点是发送到队列的消息被一个…
Kafka消息分发和消费者push.pull机制 1. 消息分发 Producer客户端负责消息的分发 kafka集群中的任何一个broker都可以向producer提供metadata信息,这些metadata中包含”集群中存活的servers列表”/”partitions leader列表”等信息: 当producer获取到metadata信息之后, producer将会和Topic下所有partition leader保持socket连接: 消息由producer直接通过socket发送到…
Kafka学习笔记(四)-- API使用 1.Producer API 1.1 消息发送流程 Kafka的Producer发送消息采用的是异步发送的方式.在消息发送的过程中,涉及到了两个线程--main线程和Sender线程,以及一个线程共享变量--RecordAccumulator.main线程将消息发送给RecordAccumulator,Sender线程不断从RecordAccumulator中拉取消息发送到Kafka broker. 来一个动图品品: 注意图中的三个组件: interce…
摘要:Kafka中的位移是个极其重要的概念,因为数据一致性.准确性是一个很重要的语义,我们都不希望消息重复消费或者丢失.而位移就是控制消费进度的大佬.本文就详细聊聊kafka消费位移的那些事,包括: 概念剖析 kafka的两种位移 关于位移(Offset),其实在kafka的世界里有两种位移: 分区位移:生产者向分区写入消息,每条消息在分区中的位置信息由一个叫offset的数据来表征.假设一个生产者向一个空分区写入了 10 条消息,那么这 10 条消息的位移依次是 0.1.-.9: 消费位移:消…
前言 之前我们一起了解了使用RocketMQ事务消息解决生产者发送消息时消息丢失的问题,但使用了事务消息后消息就一定不会丢失了吗,肯定是不能保证的. 因为虽然我们解决了生产者发送消息时候的消息丢失问题,但也只是保证Broker正确的接收到了消息,实际上接收到的消息会保存在os cache中,如果此时broker机器突然宕机,os cache中的消息数据就丢失掉了. 而且就算是os cache中的消息已经刷盘到了磁盘中,如果磁盘突然就坏了,消息是不是也就丢失了. 所以我们还要考虑Broker如何保…
Kafka 分片存储机制 Broker:消息中间件处理结点,一个 Kafka 节点就是一个 broker,多个 broker 可以组成一个 Kafka集群. Topic:一类消息,例如 page view 日志.click 日志等都可以以 topic 的形式存在,Kafka 集群能够同时负责多个 topic 的分发. Partition:topic 物理上的分组,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列. Segment:partition…
消息的可靠投递 在使用Rabbitmq的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景.Rabbitmq为我们提供了两种方式用来控制消息的投递可靠性模式 confirm确认模式 return模式 rabbitmq整个消息投递的路径为: provider --> rabbitmq broker --> exchange --> queue --> consumer 消息从provider到exchange则会返回一个confireCallback函数 消息从exchange…
Kafka Need No Keeper 最近在鹅厂工作中不断接触到Kafka,虽然以前也使用过,但是对其架构和发展过程总是模模糊糊,所以在回学校准备末考的时候找些资料总结一下. Kafka Need No Keeper 是一个在Kafka Submit分享的标题,我也是看了Kafka needs no Keeper(关于KIP-500的讨论)这篇博客分享后才对Kafka有了初期的认识,如果想要了解细节的话可以直接阅读该博客分享,本篇博客是一次对Kafka的自我总结,多少有些大白话和概括之意.…
目录 一. SparkStreaming简介 1. 相关术语 2. SparkStreaming概念 3. SparkStreaming架构 4. 背压机制 二. Dstream入门 1. WordCount案例实操 2. WordCount解析 3. web UI 注意 三. Dstream创建 1. RDD队列(测试使用) 2. 自定义数据源 3. Kafka直连 案例 实现数据零丢失 四. DStream转化 (API) 无状态转化 Transform 双流 join 有状态转化(重要)…