
Kafka 설명들음
Rebalancing
Coordinator : 컨슈머 관리, 컨슈머 리더 선출등
Partition 갯수랑 consumer 갯수 맞춰야 유휴자원이 없음 (
컨슈머가 polling 대기 상태, Commit , 과 producer 가 prodcue 해도 제대로 commit 안되면 어딘가에서 message가 남아있다가 commit 되는 순간 중복 메시지로 들어옴
이유는 kafka broker와 proudce flow 사이에 step 때문임.

deserialize, serialize
json, dictionary 형태로 데이터를 받아도 producer는 이를 broker 에 저장할때 binary 형태로 저장함
메시지를 쪼개서 저장함
위 글이 이해가 안갔음.
처음엔 메시지 내용을 어느 기준으로 쪼개는개념인가 함
메시지의 저장 위치를 (정확하게는 consumer의 최근 read 한 offset 위치만) index 처럼 저장하는 개념임
= 사물함이 있으면 해당 사물함에 물건의 위치!
PageCache
빠르게 읽고 처리하는건 cache 를 통해서
KAFKA도 stream이 있음(java를 활용해 사용가능)
즉 data stream 대용량 데이터 처리에 맞는 queue의 개념인 만큼 해당 내용을 저장보다 전달에 초점이 있다
message를 순서대로 처리하기 위해 offset을 쓰는거고
1) 유사 구조 : 같은 큐, in-memory, 대용량 stream에 적합( cluster 형태도 제공)
2) 캐시 사용: page cache 대신 redis 자체의 cache를 이용해 merge를 진행한다 (kafka topic은 pub/sub에만 집중)
3) 저장 기능: dlq 를 처리할 수 있는 메모리에 데이터를 저장하는 오픈 소스의 비관계형 데이터베이스 관리 시스템
redis는 싱글톤 패턴이라 import를 이상하게 하면. 순환참조 에러가 당연히 난다
. scan 메서드란 무엇인가?
5.1. Redis SCAN 명령
목적: Redis 데이터베이스에서 키를 반복적으로 탐색하는 데 사용됩니다.
장점: KEYS 명령과 달리 Redis 서버의 성능에 큰 영향을 주지 않으며, 대규모 키셋에서도 안전하게 사용할 수 있습니다.
반환값: (cursor, keys) 형태의 튜플을 반환합니다.
cursor: 다음 스캔을 시작할 위치.keys: 현재 스캔된 키 목록.None은 값이 없음을 나타내는 특별한 객체입니다. 이를 명시적으로 사용할 때, 값이 없다는 의도를 전달하려고 할 때 사용합니다.None은 객체로 취급되지만, 이를 코루틴 처리에서 문제가 될 수 있는 예외로 간주해야 할 경우도 있습니다.None을 타입으로 선언하는 것은 드물며, 파이썬은 동적 타이핑을 사용하므로 명시적인 타입 선언이 없을 때 이를 처리하는 방식이 다를 수 있습니다.import를 통한 모듈화와 상속은 동시에 존재할 수 있습니다.super()를 통해 부모 클래스의 메서드를 호출하거나, 오버라이드하여 자식 클래스에서 기능을 재정의할 수 있습니다.ValidationError와 같은 오류를 선언하여 try-except 블록 내에서 처리할 수 있습니다.async와 await는 비동기 프로그래밍을 다루기 위한 도구이며, 모든 코루틴이 병렬 처리를 보장하는 것은 아닙니다. 비동기를 사용할 때도 완전한 병렬 처리는 아니므로, CPU 바운드 작업은 다른 방식으로 처리해야 할 수 있습니다.sleep()은 비동기 함수에서 시간 지연을 유발하며, 병렬 처리의 의미를 상실하게 할 수 있습니다.INFO는 일반적으로 성공적인 작업을 기록하지만, 중요하지 않은 정보는 기록하지 않는 것이 효율적입니다. ERROR, WARNING 같은 중요한 로그는 반드시 기록해야 합니다.결론: