1. 程式人生 > >kafka系列-kafka多分割槽的情況下保證資料的有序性

kafka系列-kafka多分割槽的情況下保證資料的有序性

場景 mysql的資料-->通過canal-->傳送到kafka-->mysql、hive

在做canal整合kafka的時候,發現一個問題,多分割槽的情況下,跨分割槽的資料消費是無序的。

這時候就會出現問題,如果消費端消費的更新日誌在插入日誌之前,就會因為資料缺失導致異常(這樣的情況隨著併發出現的概率會增大),所以,需要保證新增的日誌和更新的日誌是有序的被消費。

kafka傳送資料是支援指定分割槽的,這時候,只要把同一個表的同一個主鍵的資料發到同一個分割槽即可(如果多資料庫得加入資料庫名)

分割槽定義如下:

private int partitionDefine(String keyToPartition) {
	if (keyToPartition == null) {
		return new Random().nextInt(numPartitions);
	} else {
		return Math.abs(keyToPartition.hashCode()) % numPartitions;
	}
}
傳入的引數 tableName+主鍵

這樣,消費到的資料就是有序的。不同的場景靈活運用即可。

相關推薦

kafka系列-kafka分割槽情況保證資料有序性

場景 mysql的資料-->通過canal-->傳送到kafka-->mysql、hive 在做canal整合kafka的時候,發現一個問題,多分割槽的情況下,跨分割槽的資料消費是無序的。 這時候就會出現問題,如果消費端消費的更新日誌在插入日誌之前,就會因

kafka的topic分割槽情況,如何保證跨區的訊息消費的順序性

這個問題嚴格來說是肯定有的,kafka只能保證分割槽內的有序性。 下面是kafka作者Jay Kreps的blog中介紹kafka設計思想的一段話。 Each partition is a totally ordered log, but there is no global ordering betwe

Apache Kafka系列(四) 執行緒Consumer方案

本文的圖片是通過PPT截圖出的,讀者如果修改意見請聯絡我 一、Consumer為何需要實現多執行緒   假設我們正在開發一個訊息通知模組,該模組允許使用者訂閱其他使用者傳送的通知/訊息。該訊息通知模組採用Apache Kafka,那麼整個架構應該是訊息的釋出者通過Producer呼叫API寫入訊息到Kafk

elementUI el-select 情況包含全部選項,及獲得選中項的label

<template> <div> <span style="margin-left:30px;font-weight:bolder;">教練: <el-select v-model="staffId" pla

Spring Bean作用域為情況的注入問題

測試程式碼: @RestController @Scope("prototype") public class TestController { private static TestSer

Python版本情況四種快速進入交互式命令行的操作技巧

ext 進入 nbsp 情況 交互 菜單 只需要 創建 如何 因為工作需求或者學習需要等原因,部分小夥伴的電腦中同時安裝了Python2和Python3,相信在Python多版本的切換中常常會遇到Python傻傻分不清楚的情況,今天小編整理了四個操作技巧,以幫助大家解決這個

前端頁面情況函式的命名與函式方法的呼叫

與上一篇有些類似之處,都是在處理前端頁面不斷增多,頁面間不斷的拼接與巢狀,頁面與頁面間的函式方法的命名和dom元素一樣出現了命名頭疼的問題,比如說在easyUI前端框架下就是如此,我的解決辦法還是採用資料結構的方法,不同面板,不同頁面間的函式均放在資料結構下進行維護和管理,

前端頁面情況id的命名與初始化

id的命名,貌似就是給dom節點隨便起個名字的事,只要不重複了就行,這個看似簡單,實際上有時候卻比較的麻煩。 在編寫前端頁面時,隨著頁面的不斷增多,頁面間不斷巢狀,不斷拼接的前提下,由於dom元素的不斷增多,各頁面dom元素的id命名和dom元素的初始化就變得更加的棘手了

easyui 判斷select拉框是否選,情況清空預設值

$("#checkType").combobox({ onSelect: function(param){ if (param

Python版本情況快速進入互動式命令列非常實用的四個小技巧!

上一篇文章中,小編已經教過大家安裝Python環境了。這篇文章我來教大家如何辨別多版本Python的切換問題,我主要整理了一下四個技巧,希望能幫大家拔出這根眼中刺!   1、直接在命令列視窗中輸入命令“python”,便可以進入命令行了,如下圖所示。  

Win32程式顯示器情況顯示視窗

近來在做多顯示器下顯示視窗到特定顯示器上,並且有F11切換全屏和非全屏的功能。現總結如下: 1、先來看如何解決多顯示器顯示特定視窗的問題。 我們分如下幾步走: 第一步,建立一個win32視窗。建立一個視窗是有套路可循的,我將程式碼貼出來,並加以註釋了。 第二步,找出所有的

MFC中CEdit情況,呼叫GetLine()時,發現老是後面跟有亂碼【轉載】

MFC中CEdit多行情況下,呼叫GetLine()時,發現老是後面跟有亂碼。即使你把str初始化也是如此。 對於採用GetLine()呼叫,其函式說明有2種。 1.int GetLine( int nIndex, LPTSTR lpszBuffer ) co

程序情況檔案控制代碼共享的問題

1 Linux中的父子程序 fork() 和 clone()系統呼叫可用來建立新的程序。這兩個系統呼叫結束時,核心在系統的實體記憶體中為新的程序分配新的 task_struct 結構,同時為新程序要使用的堆疊分配物理頁。Linux 還會為新的程序分配新的程序識

Retrofit(OKHttp)BaseUrl情況url實時自動替換完美解決方法

前言 多數專案中會出現用到多個BaseUrl的情況,而Retrofit未提供實時切換BaseUrl的方法,且我們在使用Retrofit以及OkHttp時,通常使用單例模式建立Retrofit和OkHttpClient,也不可能每個請求都建立一個Retrofit例項。

spring rmi ip情況出現的問題

在java Main中增加引數,即改為,java -Djava.rmi.server.hostname=192.168.1.101 Main 在初始化時增加如下程式碼,System.setProperty(“java.rmi.server.hostname” , “192.168.1.101” ); 使用t

HBase在單Column和Column情況批量Put的性能對比分析

out amp .html 線程 its lse void 比較 操作 作者: 大圓那些事 | 文章可以轉載,請以超鏈接形式標明文章原始出處和作者信息 網址: http://www.cnblogs.com/panfeng412/archive/2013/11/28/hbas

C++單繼承、繼承情況的虛擬函式表分析

C++的三大特性之一的多型是基於虛擬函式實現的,而大部分編譯器是採用虛擬函式表來實現虛擬函式,虛擬函式表(VTAB)存在於可執行檔案的只讀資料段中,指向VTAB的虛表指標(VPTR)是包含在類的每一個例項當中。當使用引用或指標呼叫虛擬函式時,首先通過VPTR找到VTAB,然後通過偏移量找到虛擬函式地址並呼叫。

使用VB指令碼快速將個Excel個Sheet資料歸併到一個Excel

       當遇到要將多個Excel下的資料歸併時,特別是Excel資料量達到GB級別時,複製貼上操作就顯得很LOW,這種傻瓜操作要做幾天幾夜都沒法處理完,外行人只能看Excel發嘆.這時開發工具下的VB編輯器就起作用了.這裡秀一波操作,便利做財務,做資

[Django]在資料庫有表,但是沒有model的情況資料查詢,修改

文章目錄連線資料庫查詢資料庫更新資料庫 連線資料庫 from django.db import connection sql = "SELECT id,record_time,lose_time

解決聯網情況,開啟資料夾,就報錯"資源管理器停止工作"

 問題和前提描述 1、不聯網情況下,開啟資料夾正常 2、聯網情況下,開啟IE瀏覽器,可以正常訪問網路 3、聯網情況下,只要開啟資料夾,就提示“資源管理器問題,XXX停止工作” 解決辦法: 1、進入帶網路的安全模式,可以正常訪問網路 2、開啟msconfig 3、服務標