Я пытаюсь запустить простое приложение Faust, которое печатает сообщения из топи c только с одним разделом.
Когда запускается несколько рабочих, только один печатает сообщения, а другие рабочие просто стоят -по готовности взять на себя, если активный работник не удается. Проблема, с которой я сталкиваюсь, заключается в том, что резервные работники перестанут работать через несколько минут и не смогут вступить во владение, если произойдет перебалансировка. Это происходит после того, как broker_max_poll_interval истекает.
Насколько я понимаю, резервные работники должны иметь возможность ждать в течение неограниченного времени, чтобы захватить раздел в случае отказа активного.
Само приложение просто:
app = faust.App('kafka', broker='kafka://x.x.x.x:9092;x.x.x.x:9092')
message_topic = app.topic('test_topic')
@app.agent(message_topic)
async def mystream(stream: faust.Stream):
async for e in stream.events():
print(e.value)
if __name__ == '__main__':
app.main()
После истечения broker_max_poll_interval и повторного баланса происходит, работник застревает и должен быть повторно начался для того, чтобы снова иметь возможность присоединиться к группе:
[2020-01-29 15:13:12,238] [510] [WARNING] Heartbeat failed for group kafka because it is rebalancing
[2020-01-29 15:13:12,239] [510] [INFO] Revoking previously assigned partitions frozenset() for group kafka
Обычно (до истечения времени таймера) он снова начинает присоединяться ..
[2020-01-29 15:13:04,213] [510] [WARNING] Heartbeat failed for group kafka-to-eedb because it is rebalancing
[2020-01-29 15:13:04,213] [510] [INFO] Revoking previously assigned partitions frozenset() for group kafka
[2020-01-29 15:13:04,215] [510] [INFO] (Re-)joining group kafka
Я новичок в Faust и потоковая обработка, я что-то упускаю очевидное?
Большое спасибо