Понимание присваивания раздела потоков kafka - PullRequest
2 голосов
/ 16 апреля 2019

У меня есть две темы, одна с 3 разделами и одна с 48.

Первоначально я использовал назначитель по умолчанию, но у меня возникли некоторые проблемы, когда потребитель (модуль в kubernetes) потерпел крах.

Произошло то, что, когда модуль снова появился, он переназначил раздел из темы с 3 разделами и 0 из темы с 48.

Два неподдерживаемых модуля получили назначение 16и 32 раздела из темы с 48 разделами.

Я исправил это, используя круговой распределитель, но теперь я не уверен в том, как распределены разделы, так как я использую kstream-kstreamприсоединения и для этого мы должны гарантировать, что потребители назначены в один и тот же раздел для всех потребителей, например, C1: (t1: p0, t2: p0) C2 (t1: p1, t2: p1) и т. д.

Одна вещь, о которой я подумал, состояла в том, что я мог бы переопределить входящие события, чтобы они перераспределились, и тогда я смогу гарантировать это?

Или, может быть, я не понимаю, как работает разбиение по умолчанию ...я в замешательстве

1 Ответ

6 голосов
/ 17 апреля 2019

Kafka Streams не позволяет использовать собственный разделитель разделов.Если вы установите его самостоятельно, он будет перезаписан с помощью StreamsPartitionAssignor [1].Это необходимо для того, чтобы - если возможно - перераспределение разделов одним и тем же потребителям (иначе говоря, липкость) во время перебалансировки.Липкость важна для того, чтобы Kafka Streams мог как можно больше использовать государственные магазины на стороне потребителя.Если раздел не переназначен одному и тому же потребителю, государственные хранилища, используемые в этом потребителе, должны быть воссозданы с нуля после восстановления баланса.

[1] https://github.com/apache/kafka/blob/trunk/streams/src/main/java/org/apache/kafka/streams/StreamsConfig.java#L989

...