인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

K MJ님의 프로필 이미지

작성한 질문수

15일간의 빅데이터 파일럿 프로젝트

6.탐색 파일럿 실행 4단계 - 02.데이터 준비

redis-cli 작동 원리

해결된 질문

작성

·

347

0

안녕하세요 강의 잘 듣고 있습니다.

다름이 아니라 redis-cli 관련해서 질문이 있습니다.

$ java -cp bigdata.smartcar.loggen-1.0.jar com.wikibook.bigdata.smartcar.loggen.DriverLogMain 20210901 100 & 

으로 동작시키고 redis-cli > smembers 20200901으로 확인을 했는데, 10분이 넘게 지나도 기록이 되지 않아서 모두 삭제를 하고 다시 실행하였습니다.

20210901에서 20210801로 변경시켜서 실행하였는데, 이전에 redis에 적재되지 않았던 20210901의 과속 데이터 개수가 증가하고, 20210801은 20분 넘게 변화가 없습니다.

즉, smembers 20210901만 나오고 smembers 20210801은 나오지 않습니다.

1. 이전에 적재하던 것이 뒤늦게 진행이 된 것인가요? 삭제를 하였지만 내부 동작에는 삭제한 내용이 남아 진행되고 이후에 20210801의 과속데이터가 실행이 되게 될지 궁금합니다.

2. 이런 내부 동작을 중지시키고 다음 동작을 실행시키기 위해서는 어떤 동작을 수행하여야 하는지 궁금합니다.

3. redis에 진행되고 있는지를 확인하는 방법이 어떤 것이 있는지 궁금합니다.

감사합니다.

답변 1

1

Big.D님의 프로필 이미지
Big.D
지식공유자

안녕하세요! 빅디 입니다.

우선 아래 질문하신 내용에서요..smembers의 key값으로 2020..으로 입력하는 실수가 있었는지 확인해봐 주시고요~

"...redis-cli > smembers 20200901 으로 확인을 했는데, 10분이 넘게 지나도 기록이 되지 않아서 모두 삭제를 하고 다시 실행하였습니다."

1. 해당 날짜의 데이터를 삭제 했다면, 조회 되서는 안됩니다. 참고로 파일럿 환경에선 레디스에 저장한 데이터의 만료 시간이 1주일입니다.

2. 질문중 내부동작을 중지 시킨다는 말이 잘이해가 되질 않습니다.  ^^;;

3.레디스는 DBMS와 같은 저장소 입니다. 다만 저장소가 메모리이고 키/값 이라는 단순한 구조로 빠른 성능과 가용성을 보장하는 특징을 갖고 있습니다. 즉 A가 약속된 키로 데이터를 저장하고, B가 해당 키로 데이터를 조회 할수 있으면 정상입니다.

- 빅디 드림

K MJ님의 프로필 이미지
K MJ
질문자

우선 답변 감사드립니다.

질문 후 2021로 변경해서 실습하였지만 여전히 동일한 결과가 발생합니다.

20210801로 전부 변경해서 실습중인데 계속 20210901의 데이터가 레디스에 올라옵니다. 

20210901의 SmartCarDriverInfo.log를 삭제하고 몇 번이나 처음부터 20210801로 변경하여 실습하고 있는데,

tail -f 명령으로 확인할 수 있는 생성되고 있는 데이터 중에서 과속인 데이터가 아니라, redis에서는 key가 20210901로 계속 생성되고 있습니다.(tail -f로 확인하고 있는 데이터는 모두 20210801의 데이터입니다.)

제 생각에는 맨 처음에 20210901로 실행했던 것이 뒤늦게 쌓이고 있는 것이라고 생각하는데,

  • 단순히 로그를 삭제하는 것이 아니라 redis에 적재되고 있는 상황 및 대기열을 확인하고 이를 멈추는 작업을 수행하고 싶습니다.

혹시 어떤 방법이 있을까요??

Big.D님의 프로필 이미지
Big.D
지식공유자

안녕하세요! 빅디 입니다.

2021년09월01일 자로 로그시뮬레이터를 실행 했다면, 09월01일 과속한 차량 정보가 레디스 저장소에 저장 됩니다. (저장 기간은 1주일 입니다.)

이후 2021년08월01일 자로 로그시뮬레이터를 다시 실행 했더라도, 앞서 저장된 09월01일자의 과속 차량 정보는 1주일간 레디스에 남아 있게 됩니다. 이 데이터가 조회 되는것 입니다.

만일 09월01자의 과속 차량정보를 강제로 삭제하고 싶다면 del 명령을 사용하시면 됩니다.

127.0.0.1:6379> del 20210901

참고로  지금 Redis 테스트는 실시간 데이터 수집/적재 과정으로 로그파일(SmartCarDriverInfo.log)의 제일 마지막 라인에 실시간으로  생성 되는 데이터만 플럼 > 카프카 > 스톰 > 레디스로 흘러가는 구조입니다.  즉 앞서 생성된 09월01일자 데이터는 과거 데이터로  실시간 플럼이 수집 하지 않으며, SmartCarDriverInfo.log 파일을 삭제 하더라도 레디스에 이미 저장된 데이터는 삭제 되진 않습니다.

실시간 아키텍처가 조~금 어렵습니다. ^^;

- 빅디 드림

K MJ님의 프로필 이미지
K MJ
질문자

답변 감사합니다.

 "제일 마지막 라인에 실시간으로  생성 되는 데이터만 플럼 > 카프카 > 스톰 > 레디스로 흘러가는 구조"

처음에는 저도 위의 구조로 이해하여 redis에 생성되었던 과거의 20210901의 데이터를 del로 제거한 후, 20210801 로그 데이터를 새로 생성해서 20210801 날짜에 해당하는 데이터만 실시간으로 생성되는 것을 확인하고 있는데,

위의 그림처럼 20210901의 신규 데이터가 계속 redis에 쌓이는 것을 확인하였습니다. 

이렇게 되는 이유는 무엇일까요?

del로 삭제 후 수차례 다시 20210801로 시행했는데 계속 20210901의 데이터가 쌓입니다..ㅠㅠ

Big.D님의 프로필 이미지
Big.D
지식공유자

네~ 잘알고 계셨네요!! ㅎㅎ

파일럿 프로젝트를 정상적으로 수행 하셨다면..

레디스에서 지운 과거 데이터(20210901)는 조회 되서는 않됩니다.

일단 의심이 가는 부분은 카프카 인데요..

우선 Kafka의 retention 타임을 1주일에서 10분으로 조정을 했었는지 확인해 보시고요..
(CM 홈에서 [Kafka] → [구성]을 선 택하고, 검색어로 “Data Retention Time”를 입력한 후 7일에서 10분으로 수정)

Kafka의 Topic에 쌓이는 실시간 데이터들의 속도보다, Storm에서 데이터를 빼와 처리하고 Redis로 전송하는 속도가 늦어서 발생한 현상일 수도 있습니다. 레디스에 20210901 데이터를 삭제 했더라도 카프카에 아직 20210901 데이터가 Topic에 남아 있었다면, 삭제후에도 해당 데이터를 Storm에서 과속여부를 판단해 레디스로 전송 될 수 있기 때문 입니다.

이걸 확인해 보시려면 kafka-consumer 명령으로 20210901 데이터가 남아 있는지 확인해 보시면 됩니다.

kafka-console-consumer --bootstrap-server server02.hadoop.com:9092 --topic SmartCar-Topic  --partition 0 --from-beginning

- 빅디 드림

K MJ님의 프로필 이미지
K MJ
질문자

해결했습니다.. 좋은 답변 정말 감사합니다!

K MJ님의 프로필 이미지

작성한 질문수

질문하기