Допустим, есть 3 исполнителя (ex1, ex2, ex3). В одном executor (ex1) допустим, что приемник работает, что теперь происходит, когда данные поступают в этот источник. Допустим, данные поступили в kafka topi c, скажем "topic1", теперь получатель, работающий в ex1, будет использовать эти данные, поступившие в topi c верно? Где хранятся эти данные?
- Хранятся ли они в самом executor ex1?
- Что если эти данные слишком велики? Разбивает ли он его и распределяет ли он по другим исполнителям?
Допустим, емкость 10 ГБ для каждого исполнителя (ex1, ex2, ex3). И поступили данные, скажем, 15 ГБ (гипотетическое предположение), что происходит с ex1. Это потерпит неудачу или будет обработано? Если справится, как он справится? Распределяет ли он по кластеру. Если он распределяется по кластеру, как foreachRDD вписывается в картину, если в пакете формируется только один rdd. Как если бы оно распределялось путем разделения, теперь это более одного rdd в кластере для данного конкретного пакета?
Сколько приемников работает на искровой работе? Зависит ли это от количества источников ввода? Если спарк читает из 4 разных тем кафки, значит ли это, что 4 разных приемника будут работать отдельно в разных исполнителях? Что, если есть только 2 исполнителя и 4 темы / источника kafka? В этом случае 4 разных получателя будут работать в этих двух исполнителях равномерно? Что если источники имеют нечетное число? Если у двух исполнителей и 3 источника кафки, значит, у одного из исполнителей будет два? Что если один из исполнителей умрет? Как это будет восстановлено?