问题:
  kafka如何发送顺序消息
  方案:kafka可以通过partitionKey,将某类消息写入同一个partition,一个partition只能对应一个消费线程,以保证数据有序。
  也就是说生产者在写消息的时候,可以指定一个 key,比如说我们指定了某个订单 id 作为 key,那么这个订单相关的数据,一定会被分发到同一个 partition 中去,而且这个 partition 中的数据一定是有顺序的。
  

  Kafka如何保证单partition有序

  方案:消费者端创建多个内存队列,具有相同 key 的数据都路由到同一个内存 队列;然后每个线程分别消费一个内存队列即可,这样就能保证顺序性

总结:若要解决kafka消息顺序性问题有以下方案
 
方案一,kafka topic 只设置一个partition分区(失去kafka分布式功能)
 
方案二,producer将消息发送到指定partition分区
 
解析:
方案一:kafka默认保证同一个partition分区内的消息是有序的,则可以设置topic只使用一个分区,这样消息就是全局有序,缺点是只能被consumer group里的一个消费者消费,降低了性能,不适用高并发的情况
 
方案二:既然kafka默认保证同一个partition分区内的消息是有序的,则producer可以在发送消息时可以指定需要保证顺序的几条消息发送到同一个分区,这样消费者消费时,消息就是有序。
 
producer发送消息时具体到topic的哪一个partition分区,提供了三种方式
 
1)指定分区
 
2)不指定分区,有指定key 则根据key的hash值与分区数进行运算后确定发送到哪个partition分区
 
3)不指定分区,不指定key,则轮询各分区发送(若出现网络问题依然还是会出现顺序错误)
 
注:
可以通过message key来定义,因为同一个key的message可以保证只发送到同一个partition,比如说key是user id,table row id等等,所以同一个user或者同一个record的消息永远只会发送到同一个partition上,保证了同一个user或record的顺序。如果你有key skewness 就有些麻烦,需要特殊处理

kafka数据顺序一致的更多相关文章

  1. Kafka数据安全性、运行原理、存储

    直接贴面试题: 怎么保证数据 kafka 里的数据安全? 答: 生产者数据的不丢失kafka 的 ack 机制: 在 kafka 发送数据的时候,每次发送消息都会有一个确认反馈机制,确保消息正常的能够 ...

  2. 结合docker做flask+kafka数据接口与压力测试

    一.需求 需要做实时数据接入的接口.数据最终要写入库,要做到高并发,数据的完整,不丢失数据. 二.技术选型 1.因为只是做简单的接口,不需要复杂功能,所以决定用flask这个简单的python框架(因 ...

  3. kafka数据祸福和failover

    k CAP帽子理论. consistency:一致性 Availability:可用性 partition tolerance:分区容忍型 CA :mysql oracle(抛弃了网络分区) CP:h ...

  4. Gobblin采集kafka数据

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 找时间记录一下利用Gobblin采集kafka数据的过程,话不多说,进入正题 一.Gobblin ...

  5. java spark-streaming接收TCP/Kafka数据

    本文将展示 1.如何使用spark-streaming接入TCP数据并进行过滤: 2.如何使用spark-streaming接入TCP数据并进行wordcount: 内容如下: 1.使用maven,先 ...

  6. Flink消费Kafka数据并把实时计算的结果导入到Redis

    1. 完成的场景 在很多大数据场景下,要求数据形成数据流的形式进行计算和存储.上篇博客介绍了Flink消费Kafka数据实现Wordcount计算,这篇博客需要完成的是将实时计算的结果写到redis. ...

  7. 工具篇-Spark-Streaming获取kafka数据的两种方式(转载)

    转载自:https://blog.csdn.net/weixin_41615494/article/details/7952173 一.基于Receiver的方式 原理 Receiver从Kafka中 ...

  8. spark streaming从指定offset处消费Kafka数据

    spark streaming从指定offset处消费Kafka数据 -- : 770人阅读 评论() 收藏 举报 分类: spark() 原文地址:http://blog.csdn.net/high ...

  9. Spark Streaming接收Kafka数据存储到Hbase

    Spark Streaming接收Kafka数据存储到Hbase fly spark hbase kafka 主要参考了这篇文章https://yq.aliyun.com/articles/60712 ...

  10. flume 读取kafka 数据

    本文介绍flume读取kafka数据的方法 代码: /************************************************************************* ...

随机推荐

  1. echarts图表配置

    1.柱状图 option = { xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] ...

  2. 【学习笔记】XR872 GUI Littlevgl 8.0 移植(显示部分)

    LVGL 介绍 官方网站:LVGL - Light and Versatile Embedded Graphics Library 源码位置:GitHub - lvgl/lvgl: Powerful ...

  3. 用户行为分析模型实践(三)——H5通用分析模型

    作者:vivo 互联网大数据团队- Zhao Wei.Tian Fengbiao.Li Xiong 本文从提升用户行为分析效率角度出发,详细介绍了H5埋点方案规划,埋点数据采集流程,提供可借鉴的用户行 ...

  4. 11月30日内容总结——前端简介、http协议概念、html协议概念及基础知识和部分标签的讲解

    目录 一.前端与后端的概念 什么是前端开发? 什么是后端? 学习前端的目的 前端三剑客 二.前端前戏 三.HTTP协议 1.四大特性 2.报文格式 3.响应状态码 四.HTML概览 1.HTML简介 ...

  5. springboot返回数据null参数设为空字符串或空数组

    package com.ruoyi.framework.config.ResponseVoConfig.WebConfig; /** * @Classname MyJsonMapper * @Desc ...

  6. 复制内容到剪切板通用的js方法

    复制内容到剪切板通用的js方法 /** * 复制内容到剪切板 * @param text 要复制的内容 */ function Clipboard(text) { if (navigator.clip ...

  7. python3中,//、/ 的区别

    //:地板除,返回整数结果 /:浮点数除法,返回浮点结果 例: print(3//2)  #输出1 print(3/2)  #输出1.5 拓展:判断水仙花数 # 题目:打印出所有的"水仙花数 ...

  8. Channel和Stream的单双向问题

    stream分为input和output,为单向. channel为双向,可以write也可以read,但是通过inputstream或者outputstream获取的channle并不能实现双向的数 ...

  9. 罗姆BU32107EFV缩写词

    ADC Analog-to-Digital Converter Att Attenuation 衰减 AMix Analog Mixing AVol Analog Volume BPF Band-Pa ...

  10. Zstack迁移实战记录1

    https://blog.csdn.net/weixin_43767046/article/details/113748775 这段时间除了那个重度烤机测试(上面链接),还在做另一件事,想再做一个服务 ...