Dimas Yudha Prawira
6 min readApr 21, 2019

Streaming Golang News Channel menggunakan Apache Flume, NATS dan Telegram. (Bagian ke-2)

Pada tulisan sebelumnya, kita sudah membahas gambaran umum dari sistem yang akan dibuat. Pada bagian ini, kita akan coba mempelajari komponen yang akan kita gunakan satu per-satu.

Biar tidak lupa, yuk kita lihat kembali end-to-end arsitekturnya.

end-to-end arsitektur

Komponen atau tools pertama yang akan kita bahas pada bagian ini adalah Apache Flume.

Apache Flume

Apa itu Apache Flume?

Flume adalah aplikasi perangkat lunak yang digunakan untuk mengumpulkan, menggabungkan dan mengangkut sejumlah besar data streaming seperti file log, event, dll., dari sumber-sumber yang berbeda ke dalam tempat penyimpanan data yang terpusat.

Flume adalah salah satu aplikasi perangkat lunak yang digunakan dalam dunia Big data, data-data dari sumber berbeda distream dan dimasukan kedalam tempat penyimpanan untuk selanjutnya diproses.

Instalasi Apache Flume

Apache Flume bisa di-unduh pada alamat berikut :

https://www-us.apache.org/dist/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz

kita menggunakan versi terbaru yaitu versi 1.9.0, untuk mengunduhnya bisa menggunakan aplikasi wget

$wget https://www-us.apache.org/dist/flume/1.9.0/apache-flume-1.9.0-bin.tar.gz

setelah kita mengunduh Flume, selanjutnya adalah melakukan ekstraksi file menggunakan tool tar

$tar -zxf apache-flume-1.9.0-bin.tar.gz

Setelah proses ekstraksi selesai, maka akan ada folder baru ditempat kita melakukan proses ekstraksi. Tetapi jika kita ingin melakukan ekstraksi pada folder berbeda, maka menggunakan perintah berikut

$tar -xf apache-flume-1.9.0-bin.tar.gz -C /target/directory

Selanjutnya masuk kedalam folder yang sudah dibuat setelah proses ekstraksi sebelumnya

$cd apache-flume-1.9.0-bin/lib

bisa kita lihat didalam folder lib, connector twitter sebenarnya sudah masuk kedalam distribusi Flume sehingga untuk koneksi ke Twitter, kita tidak perlu menambahkan library tambahan hanya cukup melakukan proses konfigurasi saja, akan tetapi ada kasus dimana hasil dari data ingest twitter menjadi format yang tidak bisa terbaca (unreadable). Solusi untuk masalah ini, diperlukan tambahan 1 file library (.jar) yaitu flume-sources-1.0-SNAPSHOT.jar . 1 file tambahan library bisa kita build dari repo berikut :

File konfigurasi Flume berada pada folder /conf.

$cd apache-flume-1.9.0-bin/conf
isi didalam folder konfigurasi Flume

didalam folder /conf terdapat beberapa file yaitu :

flume-conf.properties.template : file konfigurasi connector Flume.

flume-env.ps1.template : file konfigurasi environment.

flume-env.sh.template : file konfigurasi environment variabel, mencakup classpath, dll.

log4j.properties : file konfigurasi logging pada Flume.

Tahapan konfigurasi :

File flume-env.sh.template

  1. Ubah nama file flume-env.sh.template menjadi flume-env.sh
$cp flume-env.sh.template flume-env.sh

2. Buka file flume-env.sh menggunakan teks editor (vim, vi, nano)

$vim flume-env.sh
konten file flume-env.sh

3. hapus tanda # pada sintak FLUME_CLASSPATH dan isi dengan path folder /lib

4. simpan hasil konfigurasi

File flume-conf.properties.template

Selanjutnya kita akan melakukan konfigurasi untuk sink-source Flume. Sebagian tahapannya sama dengan tahapan konfigurasi environment Flume, hanya saja perbedaannya terletak pada konten konfigurasi.

  1. Ubah nama flume-conf.properties.template menjadi twitter-conf.properties
$cp flume-conf.properties.template twitter-conf.properties

2. Buka file konfigurasi twitter-conf.properties menggunakan teks editor (vi, vim, nano).

$vim twitter-conf.properties
konten file twitter-conf.properties

3. Sesuaikan isi konfigurasi.

Berikut adalah contoh konfigurasi yang gw gunakan untuk koneksi ke Twitter dan menyimpan hasil stream ke file.

catatan : kita akan menyimpan hasil stream dari twitter kedalam file terlebih dahulu sebelum selanjutnya dikoneksikan ke NATS

TwitterAgent.sources = Twitter
Twitter.channels = MemChannel
Twitter.sinks = fr1
# Describing/Configuring the source
TwitterAgent.sources.Twitter.type = com.cloudera.flume.source.TwitterSource
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sources.Twitter.consumerKey = <from Twitter>
TwitterAgent.sources.Twitter.consumerSecret = <from Twitter>
TwitterAgent.sources.Twitter.accessToken = <from Twitter>
TwitterAgent.sources.Twitter.accessTokenSecret = <from Twitter>
TwitterAgent.sources.Twitter.keywords = #GoLang, #golang
TwitterAgent.sinks.fr1.type = file_roll
TwitterAgent.sinks.fr1.channel = MemChannel
TwitterAgent.sinks.fr1.sink.directory = ../apache-flume-1.9.0-bin/sink_dir
# Each channel's type is defined.
TwitterAgent.channels.MemChannel.type = memory
TwitterAgent.channels.MemChannel.capacity = 10000
TwitterAgent.channels.MemChannel.transactionCapacity = 10000fi

pada konfigurasi TwitterAgent.sources.Twitter.type, gunakan tipe com.cloudera.flume.source.TwitterSource, jangan gunakan tipe org.apache.flume.source.twitter.TwitterSource dikarenakan hasil dari ingest data akan menjadi format yang tidak terbaca.

Untuk konfigurasi berikut

TwitterAgent.sources.Twitter.consumerKey = <from Twitter>
TwitterAgent.sources.Twitter.consumerSecret = <from Twitter>
TwitterAgent.sources.Twitter.accessToken = <from Twitter>
TwitterAgent.sources.Twitter.accessTokenSecret = <from Twitter>

value-nya bisa kita dapatkan pada konfigurasi di sisi Twitter yang akan kita bahas selanjutnya.

Twitter Application

Twitter application adalah fitur dari Twitter yang ditujukan bagi pengembang pihak ketiga (third-party developer), sehingga pengembang ini bisa melakukan koneksi atau integrasi dengan Twitter.

Untuk membuat aplikasi di Twitter, silahkan akses alamat berikut : https://developer.twitter.com

halaman depan pengembang Twitter
halaman aplikasi pengembang Twitter

Jika kita udah punya akun twitter, kita bisa login menggunakan akun tersebut dan kalo belum punya, bisa daftar terlebih dahulu.

Untuk membuat aplikasi di Twitter, klik tombol Create an app.

Disini gw sebelumnya udah membuat aplikasi di Twitter dengan nama grepdata. Untuk keperluan pembuatan sistem ini, gw akan bikin aplikasi baru dengan nama GoNews.

Setelah proses pembuatan aplikasi selesai, kita bisa melihat kode akses yang akan kita isi di konfigurasi Flume (token, accessToken, Keys) pada tab Keys and tokens

halaman aplikasi Twitter

Setelah semua konfigurasi selesai dilakukan, tahapan selanjutnya adalah melakukan pengetesan dengan menjalankan Flume agent.

Untuk menjalankan Flume, masuk kedalam folder /bin lalu jalankan perintah berikut

$./flume-ng agent --conf ../conf/ -f ../conf/twitter-conf.properties Dflume.root.logger=DEBUG,console -n TwitterAgent

Penjelasan parameter

  • conf-file : Flume konfigurasi konektor, source, channel, sink dan properti yang berkaitan lainnya.
  • name : Nama agent yang diset. dalam tulisan ini kita menggunakan nama TwitterAgent.
  • conf : Path folder konfigurasi Flume. Umumnya, $FLUME_HOME/conf
  • Dflume.root.logger=INFO,console : Menuliskan log aplikasi serta level yang akan ditulis kedalam log.

Dikarenakan perintah tersebut menjalankan Flume di foreground proses, maka jika kita terminate atau close Flume agent akan berhenti juga. Foreground proses baik dilakukan bila kita masih dalam tahap pengetesan (trial-error) konfigurasi, tapi bilamana konfigurasi sudah tidak ada masalah, maka sebaiknya menjalankan Flume agent pada background proses sehingga event terminate tidak akan otomatis menghentikan Flume agent.

berikut adalah perintah untuk menjalankan Flume agent pada background.

$nohup ./flume-ng agent --conf ../conf/ -f ../conf/twitter-conf.properties Dflume.root.logger=INFO,console -n TwitterAgent &

log Flume akan dibuat otomatis pada folder yang ditentukan (telah diset pada konfigurasi log4j.properties)

Jika tidak ada masalah, file stream dari Twitter akan dapat kita lihat pada file yang diset pada folder yang ditentukan

hasil ingest twitter dan sink ke file
konten file

Konfigurasi Flume masih akan berlanjut ya, karena setelahnya kita akan melakukan rekonfigurasi Flume agar melakukan sink hasil stream kedalam NATS messaging server.

Stay tunned…

Silahkan subscribe atau join Telegram channel https://t.me/golang_news_channel untuk mendapatkan informasi terbaru mengenai teknologi Go setiap minggunya.

Dimas Yudha Prawira

Open Source enthusiast and contributor, @java @gophers @erlanger @embedded, spare-time writer and full-time coder, working as Ordinary Engineer