kafka 總結(jié)
- 心跳線程和poll線程分開,但是心跳線程是在poll線程中啟動的
- 在滿足max.partition.fetch.bytes限制的情況下,假如fetch到了100個record,放到本地緩存后,由于max.poll.records限制每次只能poll出15個record。
那么KafkaConsumer就需要執(zhí)行7次poll才能將這一次通過網(wǎng)絡(luò)發(fā)起的fetch請求所fetch到的這100個record消費完畢。其中前6次是每次pool中15個record,最后一次是poll出10個record。 - session.timeout.ms:這個值必須設(shè)置在broker configuration中的group.min.session.timeout.ms 與 group.max.session.timeout.ms之間。
當Consumer由于某種原因不能發(fā)Heartbeat到coordinator時,并且時間超過session.timeout.ms時,就會認為該consumer已退出,它所訂閱的partition會分配到同一group 內(nèi)的其它的consumer - ·heartbeat.interval.ms:心跳是在consumer與coordinator之間進行的。心跳是確定consumer存活,加入或者退出group的有效手段。所以heartBeat最好小于session.timeout 這樣我們可以在缺少多個heartBeat后再讓該consumer退出
- ·max.poll.interval.ms:前面說過要求程序中不間斷的調(diào)用poll()。如果長時間沒有調(diào)用poll,且間隔超過這個值時,就會認為這個consumer失敗了。因為我們poll一般都是阻塞一段時間poll,如果pollTimeout大于max.poll.interval.ms 會導(dǎo)致
如果沒有數(shù)據(jù) 在阻塞過程中kafka 剔除該consumer