2.1 本地環(huán)境下kafka批量導(dǎo)入數(shù)據(jù)

目錄
1.系統(tǒng)架構(gòu)
2.環(huán)境搭建
2.1本地環(huán)境下kafka批量導(dǎo)入數(shù)據(jù)
2.2 kafka-manager的安裝與配置
3.1 Spark Streaming 性能調(diào)優(yōu)(一): 解決并行度
3.2 Spark Streaming 性能調(diào)優(yōu)(二): 解決task傾斜

上篇文章2.環(huán)境搭建的補(bǔ)充

其實下載下來的kafka中就自帶了zookeeper服務(wù), 進(jìn)行kafka/bin目錄下會看到有zookeeper-server-start.sh這個腳本,
執(zhí)行:

bin/zookeeper-server-start.sh config/zookeeper.properties

即可運(yùn)行與該kafka版本對應(yīng)的zookeeper

隨后執(zhí)行:

bin/kafka-server-start config/server.properties

執(zhí)行kafka

但是畢竟我們的spark程序是需要從kafka里面獲取數(shù)據(jù)的, 所以在本地環(huán)境下導(dǎo)入數(shù)據(jù)到kafka供我們的spark程序獲取是必須的.
網(wǎng)上很多人的帖子都是說用kafka-connector來導(dǎo)入數(shù)據(jù), 但是本地調(diào)試的話根本不需要這么大費(fèi)周章, 因為kafka提供了非常方便的數(shù)據(jù)導(dǎo)入腳本: kafka-console-producer

kafka-console-producer

輸入單挑數(shù)據(jù)

kafka-console-producer相當(dāng)于一個運(yùn)行在控制臺的生產(chǎn)者, 它可以由用戶手動一條一條地輸入數(shù)據(jù), 也可以直接指定一個數(shù)據(jù)文件批量導(dǎo)入, 用法也非常簡單:

bin/kafka-console-producer --broker-list localhost:9092 --topic test_topic

控制臺就會讀取用戶輸入, 一行為一條數(shù)據(jù), 如:

test123  hahaha
批量導(dǎo)入數(shù)據(jù)

如果想批量導(dǎo)入數(shù)據(jù), 我們則可以指定數(shù)據(jù)源文件

#file_path為數(shù)據(jù)源文件的路徑
bin/kafka-console-producer --broker-list localhost:9092 --topic test_topic < file_path

這樣稍等片刻數(shù)據(jù)就會導(dǎo)入完畢


kafka-manager截圖

一個有29w條數(shù)據(jù)的文件就導(dǎo)入好了!!!

均勻?qū)霐?shù)據(jù)

按照上面的步驟, kafka確實是導(dǎo)入了數(shù)據(jù), 但是你點(diǎn)進(jìn)去topic的視圖, 會發(fā)現(xiàn)數(shù)據(jù)都集中在一個partition上.這對于模擬數(shù)據(jù)源數(shù)據(jù)傾斜的情況非常有幫助, 但是如果我們需要的是數(shù)據(jù)均勻分布在不同partition上的情況呢?

kafka導(dǎo)入數(shù)據(jù)到分區(qū)的機(jī)制

要使數(shù)據(jù)均勻分布在kafka不同的分區(qū)上的話, 就必須了解kafka的分發(fā)數(shù)據(jù)的方式.

kafka默認(rèn)是使用隨機(jī)輪詢的方式來訪問不同的分區(qū), 并把數(shù)據(jù)寫入分區(qū)的, 而我們使用腳本kafka-console-producer.sh導(dǎo)入數(shù)據(jù)的時候, kafka是把這個文件中的記錄都當(dāng)做一個批次的數(shù)據(jù), 所以就只寫入一個分區(qū)了.

將文件分片寫入kafka

既然kafka把一個文件當(dāng)一個批次, 那么只要把文件分片成各個小的文件再導(dǎo)入就好了, 這里我的做法是編寫了一個shell腳本來分割大文件, 并將小文件逐個導(dǎo)入kafka.

#!/bin/bash

KAFKA_HOME=/home/lalala/CODE/Kafka/kafka_2.10-0.8.2.2

#文件路徑和文件名
file_path=$1
file_name=${file_path##*/}
file_dir=${file_path%/*}

echo "$file_path, $file_name, $file_dir"
#分區(qū)數(shù)
partitions=$2
let file_num=partitions*2
#數(shù)據(jù)源文件的行數(shù)
line_num=`sed -n '$=' $file_path`
echo "the line count of source file $file_name is $line_num"

#分片每個文件的行數(shù)
let chunk_line_num=line_num/file_num
echo "the line count of every chunk file is $chunk_line_num"

#創(chuàng)建存儲分片的文件夾
if [ -d "$file_dir/$file_name-chunks" ];then
echo "directory $file_dir/$file_name-chunks does exist."
else
mkdir "$file_dir/$file_name-chunks"
fi

#判斷文件是否創(chuàng)建成功,如果成功則將源文件內(nèi)容分片寫入
if [ -d "$file_dir/$file_name-chunks" ];then
echo "create dir $file_dir/$file_name-chunks success."
for((i=1;i<=$file_num;i++));
do
line_start=`expr \( $i - 1 \) \* $chunk_line_num + 1`
line_end=`expr $line_start + $chunk_line_num - 1`
awk "NR==$line_start,NR==$line_end" $file_path > "$file_dir/$file_name-chunks/$file_name-$i"
done
else echo "create dir $file_dir/$file_name-chunks fail."
fi

#將各個分片寫入kafka
for((i=1;i<=$file_num;i++));
do
su - $USER -c "JMX_PORT=10005 $KAFKA_HOME/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic lala_topic < $file_dir/$file_name-chunks/$file_name-$i"
echo "$file_dir/$file_name-chunks/$file_name-$i imported"
done

exit 0

shell腳本的相關(guān)語法, 推薦各位做后端開發(fā)的童鞋還是都學(xué)習(xí)一下, 相信以后會大有幫助的.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末佛猛,一起剝皮案震驚了整個濱河市晾腔,隨后出現(xiàn)的幾起案子憋活,更是在濱河造成了極大的恐慌,老刑警劉巖仗颈,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椿访,死亡現(xiàn)場離奇詭異频伤,居然都是意外死亡舍悯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門虹菲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靠胜,“玉大人,你說我怎么就攤上這事毕源±四” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵霎褐,是天一觀的道長址愿。 經(jīng)常有香客問我,道長冻璃,這世上最難降的妖魔是什么响谓? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任损合,我火速辦了婚禮,結(jié)果婚禮上娘纷,老公的妹妹穿的比我還像新娘嫁审。我一直安慰自己,他們只是感情好赖晶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布律适。 她就那樣靜靜地躺著,像睡著了一般遏插。 火紅的嫁衣襯著肌膚如雪捂贿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天胳嘲,我揣著相機(jī)與錄音厂僧,去河邊找鬼。 笑死胎围,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的德召。 我是一名探鬼主播白魂,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼上岗!你這毒婦竟也來了福荸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤肴掷,失蹤者是張志新(化名)和其女友劉穎敬锐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呆瞻,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡台夺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了痴脾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颤介。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赞赖,靈堂內(nèi)的尸體忽然破棺而出滚朵,到底是詐尸還是另有隱情,我是刑警寧澤前域,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布辕近,位于F島的核電站,受9級特大地震影響匿垄,放射性物質(zhì)發(fā)生泄漏移宅。R本人自食惡果不足惜归粉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吞杭。 院中可真熱鬧盏浇,春花似錦、人聲如沸芽狗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽童擎。三九已至滴劲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間顾复,已是汗流浹背班挖。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芯砸,地道東北人萧芙。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像假丧,于是被迫代替她去往敵國和親双揪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理包帚,服務(wù)發(fā)現(xiàn)渔期,斷路器,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 姓名:周小蓬 16019110037 轉(zhuǎn)載自:http://blog.csdn.net/YChenFeng/art...
    aeytifiw閱讀 34,713評論 13 425
  • Kafka官網(wǎng):http://kafka.apache.org/入門1.1 介紹Kafka? 是一個分布式流處理系...
    it_zzy閱讀 3,885評論 3 53
  • Kafka入門經(jīng)典教程-Kafka-about云開發(fā) http://www.aboutyun.com/threa...
    葡萄喃喃囈語閱讀 10,812評論 4 54
  • 本文轉(zhuǎn)載自http://dataunion.org/?p=9307 背景介紹Kafka簡介Kafka是一種分布式的...
    Bottle丶Fish閱讀 5,465評論 0 34