Безопасно ли использовать пул Redis в потоках kafka? - PullRequest
0 голосов
/ 18 сентября 2018

Итак, вопрос заключается в безопасности использования внешнего хранилища состояний внутри потоковых функций, таких как фильтр, карта и т. Д.

Можно ли сделать что-то вроде этого:

JedisPool pool = ...;
KStream stream = ...;
stream.map((k, v) -> {
    JedisClient client = pool.getResource();
    ....
    client.close();
});
...
KafkaStreams streams = ...;

Можетэто вызывает ошибки из-за использования одного пула внутри нескольких потоковых задач?В Apache Flink я могу использовать Rich*Function<>, где я могу настроить пул соединений для любого хранилища только один раз в методе open.В apache spark я также могу настроить глобальные соединения.Нужно ли делать то же самое, используя потоки Кафки или нет?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Эквивалентом Rich*Function будет использование transform() вместо map(), что позволяет вам init() и close() a Transformer.

Ваш подход также должен работать, даже если вы захотите try-catch, чтобы гарантировать выполнение close().Тем не менее, это не рекомендуемый шаблон.

В зависимости от вашего варианта использования может быть лучше загрузить данные из Redis в раздел Kafka (не уверен, есть ли разъем Redis) и загрузить данные вKTable.Вместо map() или transform() вы должны выполнить объединение потоковой таблицы.

0 голосов
/ 18 сентября 2018

Redis не рекомендуется для производства с Spring Cloud Stream - механизм связывания не полностью функционален и возможна потеря сообщений.

...