Redis와 Kafka의 차이점 [닫힘]


91

Redis는 Kafka와 마찬가지로 실시간 pub-sub로 사용할 수 있습니다.

언제 사용할지 혼란 스럽습니다.

모든 사용 사례는 큰 도움이 될 것입니다.


15
이 질문이 "의견 기반"으로 종결 된 이유를 잘 모르겠습니다. 둘 사이에는 객관적인 기술적 차이점이 있으며 기존 답변은 이러한 차이점을 명확하게 설명합니다.
David Anderson

답변:


144

Redis pub-sub는 생성 한 모든 메시지가 한 번에 모든 소비자에게 전달되고 데이터가 어디에도 보관되지 않는 화재 및 잊어 버림 시스템과 거의 같습니다. Redis와 관련하여 메모리에 제한이 있습니다. 또한 생산자와 소비자의 수는 Redis의 성능에 영향을 미칠 수 있습니다.

반면 Kafka는 대기열로 사용할 수있는 높은 처리량의 분산 로그입니다. 여기에서 원하는 수의 사용자가 생산할 수 있고 소비자는 원하는 시간에 소비 할 수 있습니다. 또한 큐를 통해 전송 된 메시지에 대한 지속성을 제공합니다.

최종 테이크 :

Redis 사용 :

  1. 화재를 원하고 생성하는 모든 메시지가 소비자에게 즉시 전달되는 일종의 시스템을 원치 않는 경우.
  2. 속도가 가장 중요하다면.
  3. 데이터 손실을 견딜 수 있다면.
  4. 전송 된 메시지를 시스템에 보관하지 않으려는 경우.
  5. 처리 할 데이터의 양은 크지 않습니다.

kafka 사용 :

  1. 신뢰성을 원한다면.
  2. 소비 후에도 전송 된 메시지 사본을 시스템에 보유하려는 경우.
  3. 데이터 손실을 감당할 수없는 경우.
  4. 속도가 큰 문제가 아니라면.
  5. 데이터 크기가 크다

74
한 가지 주요 차이점은 Redis Pub / Sub는 푸시 기반이고 Kafka Pub / Sub는 풀 기반이라는 것입니다. 즉, Redis에 게시 된 메시지는 즉시 구독자에게 자동으로 전달되는 반면 Kafka 데이터 / 메시지는 소비자에게 푸시되지 않으며 소비자는 메시지를 처리 ​​할 준비가되면 메시지를 요청합니다. cloudkarafka.com/blog/… kafka.apache.org/documentation.html#design_pull
Zeni

이것을 읽으 십시오 : redis.io/topics/persistence 전송 된 메시지를 보관하는 것이 가능해 보입니다. 내가 잘못?
David D.

1
@DavidD : 제공 한 링크 redis전송 되었지만 아직 처리 되지 않은 메시지가를 다시 시작한 후 손실되지 않도록 구성하는 방법을 설명합니다 redis. 그것은 그렇게 할 수 있지만, redis수 없습니다 보류 (또는 유지 @Karthikeyan의 재사용 단어) 상자 밖으로.
Younes

12

레디 스 5.0 버전은 제공 스트림 데이터 strucutre를. 배달이 보장되는 로그 데이터 구조로 간주 될 수 있습니다. 소비자가 생산자가 스트림에 추가 한 새 데이터를 기다릴 수있는 일련의 차단 작업과 소비자 그룹이라는 개념을 제공합니다.

기본적으로 스트림 구조는 Kafka와 동일한 기능을 제공합니다.

다음은 문서 https://redis.io/topics/streams-intro입니다.

이 기능을 지원하는 가장 인기있는 Java 클라이언트는 RedissonJedis입니다.


1
Nikita 자신 :) 우아한 도서관! 방금 사용하기 시작했습니다. 잘 구조화되고 신중하게 생각했습니다! 당신은 천재입니다!
mmm

@mmm 감사합니다!
Nikita Koksharov

적절한 사용과 관련하여 몇 가지 질문이 있으며 잘못된 가정을하는 것이 두렵습니까? 아마도 여기에 추가 한 두 가지 질문을 검토 할 수 있습니다. 또한 괜찮다면 때때로 당신을 괴롭히기 위해 Skype에 당신을 추가하고 싶습니다. 나는 그것을 어떻게 사용하고 싶은지에 대한 통찰력을 제공 할 수 있습니다. 총 멍청이가 아닙니다 :)
mmm

예를 들어, 현재 캐시 가능한 맵을 만들고 있습니다 ... 런타임 ID를 키로 사용하고 시스템이 현재 데크에서 처리하고있는 항목 목록을 추가합니다 ... 목록, 나는 추측에 대한 ArrayList를 만들 수 있습니다 , 나는 redisson이 나를 위해 내부적으로 변환 할 것이라고 믿지만, 내가하지 않고 redisslon 목록을 만들면 이름을 지정해야합니다. 맞습니까? 그러면 내부적으로 그 목록에 어떤 이름을 부여 하시겠습니까? 임의의 ID? API는 사용 사례가 있으므로 createList, createMap 등이 적은 매개 변수를 제공하지 않아야합니까?
mmm

물론 randomUuid를 보낼 수 있지만 redisson에 좋은 이름 생성기가 있다는 것을 알고 있으면 좋을 것입니다. 또한 "taken"요소를 포함하는 맵에 의해 백업 된 redisson deque가 포함 된 배치 작업을 처리하기 위해 자체 Deque를 작성하고 있습니다. 대기열을 처리하는 각 8 개의 스레드가있는 10 개의 시스템이 있고 핵폭탄이 발생하면 모두 처리되지 않은 상태로 손실되고 처리되지 않은 상태로 남게됩니다.
mmm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.