Spring Cloud Aws kinesis Binder Все JVM в группе используют одно и то же сообщение с разными интервалами - PullRequest
0 голосов
/ 24 марта 2019

У нас есть три контейнера, которые подключаются к потоку Kinesis как потребители, использующие связыватель кинесиса Spring Cloud AWS. Мы использовали группы потребителей для распределения нагрузки по трем контейнерам. Требование заключается в том, что контейнеры распределяют нагрузку, и должна быть возможность равномерно распределить нагрузку.

  1. Все контейнеры используют одну и ту же конфигурацию приложения с сервера конфигурации

В настоящее время у нас есть конфигурация, как показано ниже.

spring:
  cloud:
    stream:
      bindings:
        MyStream:
          group: my-group
          destination: stream-1
          content-type: application/json

Все контейнеры потребляют одно и то же сообщение, но в разное время (с разницей от 5 до 10 минут)

Согласно документации,

Распределение статических осколков в пределах одной группы потребителей Можно равномерно распределить осколок по всем экземплярам в пределах одной группы потребителей. Это делается путем настройки:

spring.cloud.stream.instanceCount= to number of instances

spring.cloud.stream.instanceIndex= current instance’s index

Поскольку мы используем один и тот же сервер конфигурации, не могли бы вы помочь, как обеспечить балансировку нагрузки.

1 Ответ

0 голосов
/ 25 марта 2019

Прежде всего, если вы используете DynamoDB в своем проекте, будет создан bean-компонент DynamoDbLockRegistry, который позволит всем экземплярам получить доступ к общим данным об исключительном доступе к каждому шарду. Поэтому только один экземпляр сможет использовать записи из одного осколка.

Возможно, что только один экземпляр заберет все осколки из потока, но не похоже, что эта же запись может перейти в другой экземпляр.

Для spring.cloud.stream.instanceIndex вы можете передать его как аргумент JVM: -Dspring.cloud.stream.instanceIndex= для каждого экземпляра как уникальное значение, поэтому каждый экземпляр будет получать только свой собственный набор осколков из потока. В противном случае его невозможно распознать через общий сервер конфигурации.

...