Apakah biasanya topik kafka per jam atau per hari?

Saya mencatat kunjungan halaman dan permintaan pencarian (semacam analisis aliran klik) ke kafka. Saya bermaksud untuk memprosesnya secara batch secara berkala, katakanlah per jam atau per hari, dan kemudian menulis hasil agregat ke elasticsearch.

Jika tidak ditulis ke kafka, melainkan ke sistem file, mudah untuk mengkonfigurasi logger untuk menulis ke file dengan cap waktu di nama file, yang secara otomatis memisahkan log menurut interval jam/hari.

Namun dengan kafka, saya cukup sering mencari di Google dan belum menemukan contoh pembuatan topik baru per jam/hari. Tanpa membuat topik baru per jam/hari, saya hanya bisa membayangkan memindahkan log dari kafka ke sistem file atau hdfs melalui logstash/flume.

Apakah jarang melakukan pemrosesan batch (per jam/hari) di kafka secara langsung?


person foresightyj    schedule 20.07.2017    source sumber
comment
Saya tidak yakin saya mengerti mengapa Anda memerlukan topik baru per jam/hari. Mengapa tidak mengirim semua log Anda ke satu topik, dan melakukan pemrosesan batch? Setelah setiap pemrosesan, offset yang dilakukan pada partisi topik akan dilanjutkan, sehingga Anda tidak akan memproses ulang log yang sama.   -  person vahid    schedule 20.07.2017
comment
Jika semua data ditulis ke topik yang sama, karena mungkin muncul dalam urutan yang berbeda, artinya CreatedTime dalam data mungkin tidak diurutkan. Akan sulit untuk menentukan batasan setiap hari (walaupun sedikit ketidakakuratan mungkin tidak masalah dalam kasus saya). Jika ada topik yang ditulis berbeda, saya dapat dengan mudah memeriksa apakah waktu modifikasi terakhir suatu topik jauh lebih awal daripada waktu saat ini (dengan asumsi batch saya berjalan pada 00:10 setiap hari).   -  person foresightyj    schedule 20.07.2017
comment
Anda dapat mempartisi topik secara logis dengan sebuah kunci (dalam hal ini, kuncinya dapat berupa jam dalam sehari). Kafka akan memastikan bahwa semua pesan dengan kunci yang sama masuk ke partisi yang sama dan oleh karena itu dikonsumsi oleh satu thread konsumen.   -  person Rahul    schedule 20.07.2017
comment
@Rahul itu ide yang sangat bagus. Saya dapat memiliki jumlah partisi berapa pun asalkan lebih besar dari satu dan kemudian modulo jam dengan jumlah partisi. Terima kasih   -  person foresightyj    schedule 20.07.2017


Jawaban (1)


Kafka dikembangkan oleh LinkedIn, dan perannya di LinkedIn adalah pusat agregasi log. Jadi Kafka sangat cocok untuk mengatasi masalah seperti ini.

Saya pikir setiap peristiwa (peristiwa seperti kunjungan halaman atau pertanyaan) harus ditandai dengan cap waktu di server web Anda, bukan saat log dikirim ke Kafka. Lebih khusus lagi, ketika peristiwa kunjungan laman terjadi, peristiwa itu benar-benar melakukan permintaan ke server web Anda, lalu server web Anda menangani permintaan ini dan mengembalikan responsnya. Sementara itu, server web Anda harus mencatat peristiwa ini dengan stempel waktu, dan stempel waktu ini adalah satu-satunya titik waktu yang tepat untuk peristiwa tersebut. Tentang cara mencatat acara? Anda dapat membuat log_producer untuk mengirim pesan log ke topik tertentu ke Kafka Anda, tidak hanya mencatatnya di file lokal.

Dan untuk proses batch log per jam, anda bisa membuat 24 partisi dan menjadikan log "JAM" sebagai kunci partisi, kemudian jika anda melakukan proses batch, anda hanya perlu menarik log partisi H jika jam yang ingin anda proses adalah H . Karena Anda hanya perlu memproses log H jam terbaru, maka H'log lama telah diproses dan disimpan oleh pekerjaan proses lama.

person GuangshengZuo    schedule 21.07.2017