kafka顺序消费的一些问题和心得

简介: kafka顺序消费的一些问题和心得

记录一下最近遇到的一个问题

问题描述

业务要求: kafka上的消息要求顺序消费,且为了保证顺序在生产消息时也是顺序的投放到一个分区中.

一开始写的很简单,既然一个分区还要求顺序消费,那我就单线程消费呗,一个消费者消费一个分区单线程肯定是顺序的,刚开始也确实没有问题,但是运行一段时间后出现了问题.

接入生产环境数据后,kafka数据量突然上升一个量级,大概每天有接近1千万左右的数据,由于我们的消费者里还有一些业务逻辑,所以其实每条数据消费速度并不是很快,这样就导致了千万级的数据消费不过来,出现了消息堆积,经过1个月的消费堆积,kafak上大概堆积了有2百万的数据,极大的影响了业务正常运行.

优化过程

然后就尝试了很多的优化方法,包括从业务/程序上优化,过滤一部分无效数据,但是效果并不明显.仍然有大量数据堆积.

后来经过一段事件的思考,突然有了一个新的想法: 二次投递

思路是这样的:

业务数据要求顺序,但是也可以将业务数据划分为N类,某一类的数据内保持顺序,这样的话我就启一个单线程消费者消费源端数据,在这个消费者内部将业务数据根据类型划分,投递到不同的分区,然后再根据分区数量启动N个消费者,每个消费者消费一个分区的数据,这样就把数据分散到多个消费者,且保证了数据的顺序性.

总结

kafka分区就是为了提高读写速度,放弃了顺序性,只能在分区内部保证数据的顺序性,所以遇到顺序消费的数据,只能在分区内部消费处理.

但是为了提高消费速度,可以考虑上面这种方式,这种方式的缺点就是会多存储一份数据,并且要求数据从业务上可以划分



目录
相关文章
|
消息中间件 JSON NoSQL
记一次Flink 消费Kafka数据积压排查解决
记一次Flink 消费Kafka数据积压排查解决
记一次Flink 消费Kafka数据积压排查解决
|
消息中间件 NoSQL Kafka
【Flink-FlinkUtils】高级自定义封装工具类实现消费kafka数据保存数据到Redis
【Flink-FlinkUtils】高级自定义封装工具类实现消费kafka数据保存数据到Redis
361 0
【Flink-FlinkUtils】高级自定义封装工具类实现消费kafka数据保存数据到Redis
|
消息中间件 弹性计算 Java
【采坑-Flink消费kafka中的数据】阿里云ECS/VMware之zookeeper和kafka单机/集群环境
【采坑-Flink消费kafka中的数据】阿里云ECS/VMware之zookeeper和kafka单机/集群环境
298 0
【采坑-Flink消费kafka中的数据】阿里云ECS/VMware之zookeeper和kafka单机/集群环境
|
消息中间件 存储 运维
Kafka消费组/者协调器的介绍
什么是协调器 协调器是用于协调多个消费者之间能够正确的工作的一个角色, 比如计算消费的分区分配策略,又或者消费者的加入组与离开组的处理逻辑, 有一点类似Kafka种的控制器的角色。
Kafka消费组/者协调器的介绍
|
消息中间件 缓存 Kafka
Kafka 怎么顺序消费?面试必备。。。
Kafka 怎么顺序消费?面试必备。。。
283 1
|
消息中间件 存储 数据采集
Streaming 消费 kafka 数据的两种方式|学习笔记
快速学习 Streaming 消费 kafka 数据的两种方式
|
消息中间件 Java Kafka
Java实现Flink集成Kafka消费数据
Java实现Flink集成Kafka消费数据
437 0
|
消息中间件 Java Kafka
Java模拟读取本地数据到Flink集成的Kafka并消费数据
Java模拟读取本地数据到Flink集成的Kafka并消费数据
228 0
|
消息中间件 运维 网络协议
【kafka运维】Topic的生产和消费运维脚本
1.Topic的发送kafka-console-producer.sh 1.1 生产无key消息 ## 生产者 bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test --producer.config config/producer.properties 1.2 生产有key消息加上属性--property parse.key=true
|
消息中间件 Kafka
kafka查看组消费情况
kafka查看组消费情况
249 0
下一篇
DataWorks