เป็นเรื่องปกติที่จะมีหัวข้อคาฟคาต่อชั่วโมงหรือต่อวัน?

ฉันกำลังบันทึกการเข้าชมหน้าและคำค้นหา (การวิเคราะห์สตรีมการคลิกบางประเภท) ไปที่คาฟคา ฉันตั้งใจที่จะประมวลผลพวกมันเป็นชุดเป็นระยะ เช่น ต่อชั่วโมงหรือต่อวัน จากนั้นจึงเขียนผลลัพธ์แบบรวมไปยัง ElasticSearch

หากไม่ได้เขียนลงใน kafka แต่เขียนลงในระบบไฟล์ เป็นเรื่องง่ายที่จะกำหนดค่าตัวบันทึกให้เขียนลงในไฟล์ที่มีการประทับเวลาในชื่อไฟล์ ซึ่งจะแยกบันทึกโดยอัตโนมัติตามช่วงเวลาชั่วโมง/วัน

แต่ด้วยคาฟคา ฉันค้นหาในกูเกิ้ลหลายครั้ง แต่ยังไม่พบตัวอย่างการสร้างหัวข้อใหม่ต่อชั่วโมง/วัน โดยไม่ต้องสร้างหัวข้อใหม่ต่อชั่วโมง/วัน ฉันจินตนาการได้แค่การย้ายบันทึกจาก kafka ไปยังระบบไฟล์หรือ hdfs ผ่าน logstash/flume

การประมวลผลแบบแบตช์ (ต่อชั่วโมง/วัน) บนคาฟคาโดยตรงเป็นเรื่องยากไหม


person foresightyj    schedule 20.07.2017    source แหล่งที่มา
comment
ฉันไม่แน่ใจว่าฉันเข้าใจว่าทำไมคุณถึงต้องการหัวข้อใหม่ต่อชั่วโมง/วัน ทำไมไม่ส่งบันทึกทั้งหมดของคุณไปที่หัวข้อเดียวแล้วทำการประมวลผลเป็นชุดล่ะ หลังจากการประมวลผลแต่ละครั้ง ค่าชดเชยที่คอมมิตในพาร์ติชันหัวข้อจะดำเนินต่อไป ดังนั้นคุณจะไม่ต้องประมวลผลบันทึกเดิมซ้ำ   -  person vahid    schedule 20.07.2017
comment
หากข้อมูลทั้งหมดเขียนในหัวข้อเดียวกัน เนื่องจากข้อมูลเหล่านั้นอาจมาในลำดับที่ต่างกัน ซึ่งหมายความว่า CreatedTime ในข้อมูลอาจไม่ได้รับการเรียงลำดับ การกำหนดขอบเขตของแต่ละวันจะเป็นเรื่องยาก (แม้ว่าในกรณีของฉันอาจมีความคลาดเคลื่อนเล็กน้อยก็ตาม) หากมีการเขียนหัวข้อต่างๆ ฉันสามารถตรวจสอบได้อย่างง่ายดายว่าเวลาที่แก้ไขล่าสุดของหัวข้อนั้นเร็วกว่าเวลาปัจจุบันอย่างมากหรือไม่ (สมมติว่าชุดงานของฉันทำงานเวลา 00:10 น. ทุกวัน)   -  person foresightyj    schedule 20.07.2017
comment
คุณสามารถแบ่งพาร์ติชันหัวข้อตามตรรกะด้วยคีย์ (ในกรณีนี้ คีย์อาจเป็นชั่วโมงของวัน) Kafka จะตรวจสอบให้แน่ใจว่าข้อความทั้งหมดที่มีคีย์เดียวกันจะไปที่พาร์ติชันเดียวกัน และจะถูกใช้งานโดยเธรดผู้บริโภคเดียว   -  person Rahul    schedule 20.07.2017
comment
@Rahul นั่นเป็นความคิดที่ดีจริงๆ ฉันสามารถมีพาร์ติชั่นได้กี่พาร์ติชั่นก็ได้ ตราบใดที่มันมากกว่า 1 และชั่วโมงแบบโมดูโลตามจำนวนพาร์ติชั่น ขอบคุณ   -  person foresightyj    schedule 20.07.2017


คำตอบ (1)


Kafka ได้รับการพัฒนาโดย LinkedIn และบทบาทใน LinkedIn คือศูนย์รวมบันทึก คาฟคาจึงเหมาะมากที่จะจัดการกับปัญหาประเภทนี้

ฉันคิดว่าทุกเหตุการณ์ (เหตุการณ์เป็นเหมือนการเข้าชมหน้าหรือการสืบค้น) ควรติดแท็กด้วยการประทับเวลาในเว็บเซิร์ฟเวอร์ของคุณที่ไม่ได้อยู่ในเมื่อบันทึกถูกส่งไปยัง Kafka โดยเฉพาะอย่างยิ่ง เมื่อเหตุการณ์การเข้าชมเพจเกิดขึ้น มันจะส่งคำขอไปยังเว็บเซิร์ฟเวอร์ของคุณ จากนั้นเว็บเซิร์ฟเวอร์ของคุณจะจัดการกับคำขอนี้และส่งคืนการตอบกลับ ในขณะเดียวกัน เว็บเซิร์ฟเวอร์ของคุณควรบันทึกเหตุการณ์นี้ด้วยการประทับเวลา และการประทับเวลานี้เป็นเพียงจุดเวลาที่เหมาะสมสำหรับกิจกรรมเท่านั้น เกี่ยวกับวิธีการบันทึกเหตุการณ์? คุณสามารถสร้าง log_producer เพื่อส่งข้อความบันทึกไปยังหัวข้อเฉพาะไปยัง Kafka ของคุณ ไม่ใช่แค่บันทึกสิ่งนี้ในไฟล์ในเครื่อง

และเกี่ยวกับการประมวลผลชุดงานบันทึกต่อชั่วโมง คุณสามารถสร้าง 24 พาร์ติชันและสร้างบันทึก "HOUR" เป็นคีย์พาร์ติชัน จากนั้นหากคุณทำกระบวนการแบบแบตช์ คุณเพียงแค่ต้องดึงบันทึกของพาร์ติชัน H หากชั่วโมงที่คุณต้องการประมวลผลคือ ชม . เนื่องจากคุณเพียงแค่ต้องประมวลผลบันทึกของ H hour ล่าสุด H'log เก่าจึงได้รับการประมวลผลและบันทึกโดยงานกระบวนการเก่า

person GuangshengZuo    schedule 21.07.2017