事件流實戰 Event Streams in Action: Unified log processing with Kafka and Kinesis

Alexander Dean , Valentin Crettaz 金中浩 譯

  • 事件流實戰-preview-1
  • 事件流實戰-preview-2
  • 事件流實戰-preview-3
事件流實戰-preview-1

買這商品的人也買了...

商品描述

Linkedln、Netflix等知名應用都通過實時響應用戶和系統事件,來提高靈活度和響應速度。
在大規模系統中,需要能高效地監控、管理和處理大量的事件流。 
Kafka工具以及諸如統一日誌處理的創新模式可幫助我們為基於事件的系統創建連貫的數據處理架構。 
《事件流實戰》講解如何使用統一日誌模式,來聚合、存儲和處理事件流。
在這本實用指南中,你將看到Lambda架構、流聚合和事件重放處理等重要的系統設計,
還將看到擴展、彈性和高級流模式!讀完本書,你將能設計出易於構建、部署和維護的由數據驅動的大型應用。 
主要內容 校驗與監控事件流 事件分析 事件建模 Apache Kafka與Amazon Kinesis的使用示例

作者簡介

Alexander Dean

開發開源的事件處理與分析平台Snowplow。


Valentin Crettaz

是一名擁有25年經驗的獨立IT諮詢顧問。

  
 
金中浩

曾在花旗銀行、中國平安、360金融擔任軟件工程師與系統架構師,現為Thought Works高級諮詢顧問。
在15年的職業生涯中一直從事金融行業的軟件開發與系統架構工作,
擅長函數式編程與數據分析,堅信技術能讓生活變得更美好。

目錄大綱

目錄
第I部分  事件流與統一日誌
第1章  事件流   3
1.1  術語定義   4
1.1.1  事件   4
1.1.2  持續事件流   5
1.2  探尋我們熟悉的事件流   6
1.2.1  應用級日誌   6
1.2.2  站點分析   8
1.2.3  發布/訂閱消息   9
1.3  統一持續事件流   11
1.3.1  古典時代   12
1.3.2  混合時代   14
1.3.3  統一時代   15
1.4  統一日誌的應用場景   17
1.4.1  用戶反饋環路   17
1.4.2  整體系統監控   18
1.4.3  應用系統版本在線升級   19
1.5  本章小結   20

第2章  統一日誌   21
2.1  深入統一日誌   22
2.1.1  統一   22
2.1.2  只可追加   23
2.1.3  分佈式   23
2.1.4  有序性   24
2.2  引入我們的應用   25
2.2.1  識別關鍵事件   26
2.2.2  電子商務中的統一日誌   27
2.2.3  首個事件建模   28
2.3  配置統一日誌   30
2.3.1  下載並安裝Apache Kafka   30
2.3.2  創建流   31
2.3.3  發送和接收事件   31
2.4  本章小結   33

第3章  使用Apache Kafka進行事件流處理   35
3.1  事件流處理入門   36
3.1.1  為什麽要處理事件流?   36
3.1.2  單事件處理   38
3.1.3  多事件處理   38
3.2  設計第一個流處理程序   39
3.2.1  將Kafka作為黏合劑   39
3.2.2  明確需求   40
3.3  編寫一個簡單的Kafka worker   42
3.3.1  配置開發環境   42
3.3.2  應用配置   43
3.3.3  從Kafka讀取事件   45
3.3.4  向Kafka寫入事件   46
3.3.5  整合讀取與寫入   47
3.3.6  測試   48
3.4  編寫單事件處理器   49
3.4.1  編寫事件處理器   50
3.4.2  更新main方法   52
3.4.3  再次測試   53
3.5  本章小結   54

第4章  使用Amazon Kinesis 處理流事件   55
4.1  向Kinesis寫入事件   56
4.1.1  系統監控與統一日誌   56
4.1.2  與Kafka的術語 差異   58
4.1.3  配置事件流   58
4.1.4  事件建模   60
4.1.5  編寫代理程序   60
4.2  從Kinesis讀取事件   65
4.2.1  Kinesis的框架與SDK   66
4.2.2  使用AWS CLI讀取事件   67
4.2.3  使用boto監控Kinesis stream   72
4.3  本章小結   79

第5章  有狀態的流式處理   81
5.1  偵測“購物者棄置購物車”事件   82
5.1.1  管理者的需求   82
5.1.2  算法定義   82
5.1.3  派生事件流   83
5.2  新事件的模型   84
5.2.1  購物者將商品放入購物車   84
5.2.2  購物者支付訂單   85
5.2.3  購物者棄置購物車   85
5.3  有狀態的流式處理   86
5.3.1  狀態管理   86
5.3.2  流窗口   88
5.3.3  流式處理框架的功能   88
5.3.4  流式處理框架   89
5.3.5  為尼羅選擇一個流式處理框架   92
5.4  偵測被棄置的購物車   92
5.4.1  設計Samza job   92
5.4.2  項目準備   94
5.4.3  配置Samza job   94
5.4.4  使用Java開發job task   96
5.5  運行Samza job   101
5.5.1  YARN   101
5.5.2  提交job   102
5.5.3  測試job   102
5.5.4  改進job   104
5.6  本章小結   104

第II部分  針對流的數據工程
第6章  模式   107
6.1  模式介紹   108
6.1.1  Plum公司   108
6.1.2  將事件模式作為契約   109
6.1.3  模式技術的功能   111
6.1.4  不同的模式技術   112
6.1.5  為Plum公司選擇一種模式技術   114
6.2  Avro中的事件模型   114
6.2.1  準備開發環境   115
6.2.2  編寫質檢事件的模式   116
6.2.3  Avro與Java的互相轉換   117
6.2.4  測試   120
6.3  事件與模式的關聯   121
6.3.1  初步的探索   121
6.3.2  Plum公司的自描述事件   124
6.3.3  Plum公司的模式註冊   125
6.4  本章小結   127

第7章  事件歸檔   129
7.1  歸檔者宣言   130
7.1.1  彈性   131
7.1.2  重復處理   132
7.1.3  精準   133
7.2  歸檔的設計   135
7.2.1  什麽應被歸檔   135
7.2.2  何處進行歸檔   136
7.2.3  如何進行歸檔   136
7.3  使用Secor歸檔Kafka的事件   137
7.3.1  配置 Kafka   138
7.3.2  創建事件歸檔   140
7.3.3  配置Secor   141
7.4  批處理事件   143
7.4.1  批處理入門   143
7.4.2  設計批處理任務   145
7.4.3  使用Apache Spark編寫任務   146
7.4.4  使用 Elastic MapReduce運行任務   151
7.5  本章小結   156

第8章  軌道式流處理   157
8.1  異常流程   158
8.1.1  UNIX編程中的異常處理   158
8.1.2  Java中的異常處理   160
8.1.3  異常與日誌   163
8.2  異常與統一日誌   164
8.2.1  針對異常的設計   164
8.2.2  建立異常事件模型   166
8.2.3  組合多個正常處理流程   168
8.3  使用Scalaz組合異常   168
8.3.1  異常的處理計劃   169
8.3.2  配置Scala項目   170
8.3.3  從Java到Scala   171
8.3.4  使用Scalaz更好地處理異常   174
8.3.5  組合異常   175
8.4  實現軌道式編程   179
8.4.1  軌道式處理   180
8.4.2  構建軌道   182
8.5  本章小結   189

第9章  命令   191
9.1  命令與統一日誌   192
9.1.1  事件與命令   192
9.1.2  隱式命令與顯式命令   193
9.1.3  在統一日誌中使用命令   194
9.2  決策   195
9.2.1  Plum公司中的命令   195
9.2.2  對命令進行建模   197
9.2.3  編寫警報的模式   198
9.2.4  定義警報的模式   200
9.3  消費命令   201
9.3.1  合適的工具   201
9.3.2  讀取命令   202
9.3.3  轉換命令   203
9.3.4  連接各個程序   205
9.3.5  測試   206
9.4  執行命令   207
9.4.1  使用MailGun   207
9.4.2  完成executor   208
9.4.3  最後的測試   211
9.5  擴展命令   212
9.5.1  單條流還是多條?   212
9.5.2  處理命令執行的異常   213
9.5.3  命令層級   214
9.6  本章小結   215

第III部分  事件分析
第10章  讀取時分析   219
10.1  讀取時分析與寫入時分析   220
10.1.1  讀取時分析   220
10.1.2  寫入時分析   221
10.1.3  選擇一種解決方案   222
10.2  OOPS的事件流   223
10.2.1  貨車事件與實體   223
10.2.2  貨車司機事件與實體   224
10.2.3  OOPS的事件模型   224
10.2.4  OOPS的事件歸檔   226
10.3  使用Amazon Redshift   227
10.3.1  Redshift介紹   227
10.3.2  配置Redshift   229
10.3.3  設計事件數據倉庫   232
10.3.4  創建事件寬表   235
10.4  ETL和ELT   237
10.4.1  加載事件   237
10.4.2  維度擴展   240
10.4.3  數據易變性   244
10.5  分析   244
10.5.1  分析1:誰更換機油的次數最多?   245
10.5.2  分析2:誰是最不可靠的客戶?   245
10.6  本章小結   247

第11章  寫入時分析   249
11.1  回到OOPS   250
11.1.1  配置Kinesis   250
11.1.2  需求收集   251
11.1.3  寫入時分析算法   252
11.2  構建Lambda函數   256
11.2.1  配置DynamoDB   256
11.2.2  AWS Lambda   257
11.2.3  配置Lambda與事件建模   258
11.2.4  重溫寫入時分析算法   261
11.2.5  條件寫入DynamoDB   265
11.2.6  最後的Lambda代碼   268
11.3  運行Lambda函數   269
11.3.1  部署Lambda函數   270 
11.3.2  測試Lambda函數   272
11.4  本章小結   274
附錄  AWS入門   277
A.1  設置AWS賬戶   277
A.2  創建用戶   278
A.3  設置AWS CLI   283