Kafka實戰-資料持久化
1.概述
經過前面Kafka實戰系列的學習,我們通過學習《Kafka實戰-入門》瞭解Kafka的應用場景和基本原理,《Kafka實戰-Kafka Cluster》一文給大家分享了Kafka叢集的搭建部署,讓大家掌握了叢集的搭建步驟,《Kafka實戰-實時日誌統計流程》一文給大家講解一個專案(或者說是系統)的整體流程,《Kafka實戰-Flume到Kafka》一文給大家介紹了Kafka的資料生產過程,《Kafka實戰-Kafka到Storm》一文給大家介紹了Kafka的資料消費,通過Storm來實時計算處理。今天進入Kafka實戰的最後一個環節,那就是Kafka實戰的結果的資料持久化。下面是今天要分享的內容目錄:
- 結果持久化
- 實現過程
- 結果預覽
下面開始今天的分享內容。
2.結果持久化
一般,我們在進行實時計算,將結果統計處理後,需要將結果進行輸出,供前端工程師去展示我們統計的結果(所說的報表)。結果的儲存,這裡我們選擇的是Redis+MySQL進行儲存,下面用一張圖來展示這個持久化的流程,如下圖所示:
從途中可以看出,實時計算的部分由Storm叢集去完成,然後將計算的結果輸出到Redis和MySQL庫中進行持久化,給前端展示提供資料來源。接下來,我給大家介紹如何實現這部分流程。
3.實現過程
首先,我們去實現Storm的計算結果輸出到Redis庫中,程式碼如下所示:
package cn.hadoop.hdfs.storm;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import redis.clients.jedis.Jedis;
import cn.hadoop.hdfs.util.JedisFactory;
import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.IRichBolt;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.tuple.Tuple;
/**
* @Date Jun 10, 2015
*
* @Author dengjie
*
* @Note Calc WordsCount eg.
*/
public class WordsCounterBlots implements IRichBolt {
/**
*
*/
private static final long serialVersionUID = -619395076356762569L;
OutputCollector collector;
Map<String, Integer> counter;
@SuppressWarnings("rawtypes")
public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
this.collector = collector;
this.counter = new HashMap<String, Integer>();
}
public void execute(Tuple input) {
String word = input.getString(0);
Integer integer = this.counter.get(word);
if (integer != null) {
integer += 1;
this.counter.put(word, integer);
} else {
this.counter.put(word, 1);
}
for (Entry<String, Integer> entry : this.counter.entrySet()) {
// write result to redis
Jedis jedis = JedisFactory.getJedisInstance("real-time");
jedis.set(entry.getKey(), entry.getValue().toString());
// write result to mysql
// ...
}
this.collector.ack(input);
}
public void cleanup() {
// TODO Auto-generated method stub
}
public void declareOutputFields(OutputFieldsDeclarer declarer) {
// TODO Auto-generated method stub
}
public Map<String, Object> getComponentConfiguration() {
// TODO Auto-generated method stub
return null;
}
}
注:這裡關於輸出到MySQL就不贅述了,大家可以按需處理即可。
4.結果預覽
在實現持久化到Redis的程式碼實現後,接下來,我們通過提交Storm作業,來觀察是否將計算後的結果持久化到了Redis叢集中。結果如下圖所示:
通過Redis的Client來瀏覽儲存的Key值,可以觀察統計的結果持久化到來Redis中。
5.總結
我們在提交作業到Storm叢集的時候需要觀察作業執行狀況,有可能會出現異常,我們可以通過Storm
UI介面來觀察,會有提示異常資訊的詳細描述。若是出錯,大家可以通過Storm
UI的錯誤資訊和Log日誌列印的錯誤資訊來定位出原因,從而找到對應的解決辦法。
6.結束語
這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行討論或傳送郵件給我,我會盡我所能為您解答,與君共勉!
相關文章
- Express 實戰(八):利用 MongoDB 進行資料持久化ExpressMongoDB持久化
- 【許曉笛】EOS 資料庫與持久化 API —— 實戰資料庫持久化API
- Redis資料持久化—RDB持久化與AOF持久化Redis持久化
- Sentinel 實戰-規則持久化持久化
- fabric資料持久化持久化
- Redis 資料持久化Redis持久化
- Docker資料持久化Docker持久化
- web 資料持久化Web持久化
- 從0到1使用Kubernetes系列(六):資料持久化實戰持久化
- Docker之 資料持久化Docker持久化
- Redis的資料持久化Redis持久化
- Kafka實戰-Kafka ClusterKafka
- 資料的序列化&持久化持久化
- Redis穩定性之戰:AOF日誌支撐資料持久化Redis持久化
- Kafka實戰-Flume到KafkaKafka
- Kafka實戰-Kafka到StormKafkaORM
- iOS資料持久化設計iOS持久化
- 詳解 ZooKeeper 資料持久化持久化
- iOS中的資料持久化iOS持久化
- ActiveMQ 訊息資料持久化MQ持久化
- redis學習 - 資料持久化Redis持久化
- flutter 持久化儲存-----資料庫sqflite|8月更文挑戰Flutter持久化資料庫
- Kafka實戰-KafkaOffsetMonitorKafka
- 資料持久化,好高階~哎,資料庫啊!!持久化資料庫
- Docker --volume-資料持久化Docker持久化
- iOS資料持久化儲存-CoreDataiOS持久化
- 到底什麼是資料持久化持久化
- HarmonyOS資料管理與應用資料持久化(一)持久化
- Kafka 原理和實戰Kafka
- kafka實戰教學Kafka
- Kafka實戰-入門Kafka
- Kafka實戰-Storm ClusterKafkaORM
- redis原始碼分析(五):資料持久化Redis原始碼持久化
- Milvus 2.0 資料插入與持久化持久化
- iOS資料持久化儲存-NSKeyedArchiveriOS持久化Hive
- iOS 資料持久化的幾種方法iOS持久化
- EMQX+HStreamDB 實現物聯網流資料高效持久化MQ持久化
- Python–Redis實戰:第四章:資料安全與效能保障:第2節:快照持久化PythonRedis持久化