แล้วถ้าเป็น Kafka นของลูกค้าจัดงข้อความยาวเกินไปหน่อยเหรอ? จะ Kafka reappoint นี้พื้นที่ดิสก์ต้องอื่นของลูกค้าและจดหมายจะ doubly จัดการ?
ใช่นั่นถูกต้อง ถ้า Kafka ของลูกค้าต้องใช้นานเกินไปที่จะจัดการข้อความไว้แล้ว ต่อมาตรวจสอบการ()คือออกช้า,Kafka จะกลัรแต่งตั้งนี่พื้นที่ดิสก์ต้องอื่นของลูกค้าและข้อความจะถูกประมวลผลอีกครั้ง(และอีกครั้ง).
สำหรับมากกว่าความชัดเจนอย่างแรกเราต้องการตัดสินและนิยามคำว่า'ชีวิตอยู่ได้นานแค่ไหนยาวเกินไปหน่อยเหรอ?'.
นี่คือกำหนดไว้โดยทรัพย์สิน max.poll.interval.ms
. จาก docs,
สูงสุดของหน่วงเวลาระหว่าง invocations ของตรวจสอบการ()เมื่อใช้ของลูกค้ากลุ่มการจัดการ นี่เป็นสถานที่อัพเปอร์อีผูกพันอยู่จำนวนเงินโดบประมาณเวลาว่างลูกค้าสามารถเป็วลือไร้สาระพวกนั้นอีกก่อนกำลังทำการดึงข้อมูลมากกรายการบันทึก ถ้าตรวจสอบการ()ไม่โทรมาก่อนที่หมดอายุแล้วขอหมดเวลาแล้วที่ลูกค้าคือพิจารณาล้มเหลวในกาและกลุ่มจะ rebalance เพื่อที่จะเปลี่ยนคนให้เห็นถึงพาร์ทิชันที่มีอยู่ไปยังอีกสมาชิก.
ของลูกค้ากลุ่มคือ rebalanced ถ้าไม่มีการโทรเพื่อตรวจสอบการ()ในครั้งนี้
มีอีกทรัพย์สิน auto.commit.interval.ms
. ที่อัตโนมัติทำแบจจะเป็นชื่อเดียวระหว่างตรวจสอบการ-มันเช็คให้เวลาเวลาที่ใช้ไปเป็นมากกว่าค่าปรับแต่งค่าโดยอัตโนมัติทำตัวเลือกการขอข้อมูลเวลาและถ้าหากผลคือใช่ที่ออฟเซ็ตเป็นคนที่ไว้ใจได้
ถ้า Kafka ของลูกค้ากำลังเหมือนกันมานานเพื่อระบวนการบันทึกออกมาแล้วก็ต่อมาตรวจสอบการ()โทรยังออกช้าและแบกลับมาบนสุดท้ายตรวจสอบการ()จะไม่ยอมรับ ถ้า rebalance เกิดขึ้นในตอนนี้คนใหม่ของลูกค้างลูกค้าได้รับมอบหมายให้มัพาร์ติชันที่จะเริ่มการประมวลผลข้อความของอีกครั้ง
ของลูกค้ากลุ่ม rebalance และผลลัพธ์จากพื้นที่ดิสก์ reassignment สามารถจะหลีกเลี่ยเพิ่มขึ้นค่านี้. นี่จะเพิ่มความที่ได้รับอนุญาตทุกช่วงเวลาระหว่างคุณไปที่นั่นรอผมติดต่อกันให้มากกว่าเวลาที่จะ consumers ต้องรับมือกับการบันทึก(s)กลับมาจากตรวจสอบการ(). ที่ consumers เดียวที่จะเข้าร่วมกับค rebalance ในการโทรเพื่อตรวจสอบการดังนั้นเพิ่มขึ้นแม็กซ์ตรวจสอบการตัวเลือกการขอข้อมูลจะยังหน่วงเวลางกลุ่ม rebalances.
มีอีกปัญหาเพิ่มขึ้นในแม็กซ์ตรวจสอบการตัวเลือกการขอข้อมูลเพื่อนใหญ่เป็นค่า. ถ้าคนของลูกค้าตายสำหรับบางเหตุผลอื่นมันต้องใช้มากกว่าที่ปรับแต่ง max.poll.interval.ms
ตัวเลือกการขอข้อมูลเพื่อตรวจจับคนพวกจอมล้มเหลว
session.timeout.ms
แล้ว heartbeat.interval.ms
สามารถใช้ได้ในกรณีนี้เพื่อตรวจจับคนทั้งหมดความล้มเหลวก่อนหน้านี้เป็นที่สุดเท่าที่จะทำได้
สำหรับรายละเอียดเพิ่มเรื่องพวกค่าพารามิเตอร์:
ได้โปรดโปรดสังเกตว่าค่าปรับแต่งสำหรับ session.timeout.ms
คงจะต้องอยู่ใน allowable ช่วงที่ปรับแต่งในการปรับแต่งค่านายหน้าขายประกันโดยคุณสมบัติ
- กลุ่มมินกลุ่มงาน.หมดเวลา.มิลลิวินาที
- กลุ่มแม็กซ์.กลุ่มงาน.หมดเวลา.มิลลิวินาที
ไม่อย่างนั้นตามยกเว้นจะถูกโยนลงในขณะที่เริ่มต้นของลูกค้าลูกค้า
Exception in thread "main" org.apache.kafka.common.errors.InvalidSessionTimeoutException:
The session timeout is not within the range allowed by the broker
(as configured by group.min.session.timeout.ms and group.max.session.timeout.ms)
ปรับปรุง:เพื่อหลีกเลี่ยงการจัดการข้อความของอีกครั้ง
มีวิธีอื่นอีกใน KafkaConsumer เรียน commitAsync()
กระตุ้นให้ทำแบดำเนินงานการ)กิบัติงานอยู่
ConsumerRecords<String, String> records = kafkaConsumer.poll(Duration.ofMillis(500));
kafkaConsumer.commitAsync();
สำหรับรายละเอียดเพิ่มขึ้น commitSync()และ commitAsync(),โปรดตรวจสอบ ด้านนี้
ทำเป็นช่วงเวลาด้วยตนเองเป็นการกระทำขอบอกว่าช่วงเวลาได้ถูกประมวลผลดังนั้นค Kafka จะไม่ส่งบันทึกสำหรับเดียวกันพื้นที่ดิสก์อีกครั้ง ตอนที่แบมุ่งมั่นที่ด้วยตนเองมันคือสิ่งสำคัญสำหรับโปรดสังเกตว่าหากคนของลูกค้าก็จะตายก่อนที่การประมวลผลบันทึกว่าจะด้วยเหตุผลอะไรก็ตามมันมีโอกาสที่พวกบันทึกของจะไม่ถูกประมวลผลอีกครั้ง