실시간 데이터 처리/Kafka 10

Kafka 특징

Kafka 특징대용량 실시간 로그 처리의 특화되어 설계가 되어 있다.범용 메시지 시스템에서 제공하는 다양한 기능은 제공되지 않는다.분산 및 복제 구성을 손쉽게 할수 있다.메세지 헤더를 지닌 TCP 기반의 프로토콜을 사용하여 프로토콜에 의한 오버헤드 제거하였다.개별적으로 메시지를 전송하는 것이 아닌 batch 형태로 broker에 한 번에 전달할수 있다.메모리 저장하는 기존 메시징 시스템과는 달리 파일 시스템에 저장을 한다.데이터의 영속성이 보장된다.메세지를 일정 기간(retention) 동안 저장을 하고 잇는다.메시지수가 많을수록 시스템 성능에 크게 영향을 받지 않는다.consumer는 push 방식이 아닌 pull 방식으로 데이터를 가지고 간다.consumer의 자신의 처리 능력만큼만 메시지가를 가지고..

Kafka Partition 갯수와 Consumer 갯수에 따른 차이

Kafka Partition 갯수와 Consumer 갯수에 따른 차이- https://www.oreilly.com/library/view/kafka-the-definitive/9781491936153/ch04.html4개 Partition, 1개 ConsumerConsumer 1는 모든 Partition에서 데이터를 받는다. 4개 Partition, 2개 ConsumerConsumer 1, Consumer 2가 각각의 파티션을 나누여서 받게 된다. 4개 Partition, 4개 Consumer1개의 파티션이 하나의 컨슈머와 대응이 된다.최적의 소모 방식4개 Partition, 5개 ConsumerIdle 상태의 Consumer가 하나가 존재를 하게 된다.

Kafka Auto Commit

Kafka Auto CommitKafka OffsetKafka Partition 별로 메시지의 연속된 id (sequence id)Consumer에서도 현재까지 읽은 메시지의 offset을 가지고 있다 (_consumer_offsets)Consumer가 Kafka에 현재까지 읽은 메시지의 offset을 알려주는 것이 commit 이라고 한다.Auto Commitenable.auto.commit : true auto.commit.interval.ms : 5000 특정 주기마다 자동으로 commit을 하는 설정enable true이고 interval.ms가 5초인경우에는 5초마다 consumer에서 자동으로 commit을 하게 된다.commit을 직접관리하는 경우에는 enable을 false로 설정을 하고 ..

Kafka Producer Partition Leader / Ack, Timeout

Kafka Producer Partition Leader / Ack, Timeout Partition Leader여러대의 클러스터로 묶인 서버중 한대는 Partition Leader로 할당이 되고, 다른 서버는 Follower로 할당이 된다. Leader은 Read와 Write를 담당을 하게 되고 Follower은 Leader의 데이터를 복제(Replicate)를 한다. Leader 서버가 죽게 되면 Follower 서버중의 하나가 자동으로 Leader가 된다. `ack` configuration for producerKafka에 Message에 대해 Produce를 할때 서버로부터 ack를 어떻게 받는지에 대한 설정이다. ack를 받지 못하고 일정 시간(timeout)이 지나가면 KafkaProduce..

Kafka Broker의 버전에 따른 Java Client 라이브러리 호환성

Kafka를 이용하다보면 Broker 버전이 서로 다른 cluster를 사용할때가 있다. 아무래도 먼저 클러스터를 구성한 브로커인경우 업그레이드 하기가 어렵기 때문에 여러개의 버전을 사용할수 있다. 이와 관련해서 자료를 찾아보니 0.10.0 버전을 제외하고는 모든 java client 버전은 broker에 호환이 된다. 물론 각각의 버전에 따른 기능은 지원이 되지 않는 것이 있을수가 있다. - 아래는 Client 라이브러리 관련 호한성을 나타낸것이다. Reference- https://cwiki.apache.org/confluence/display/KAFKA/Compatibility+Matrix Broker 0.10.0Basic client compatibility:Java: clients = 0.10...

Kafka Partition과 Offset

Kafka Partition과 Offset - 각각의 파티션은 순서, 불변적으로 순서대로 저장이 된다.- Produce가 Write할때마다 Partition Write하는 형식으로 데이터가 분산이 된다.- 각각의 Partition은 replica로 복제가 되어 다른 Kafka Node에도 존재한다. (Replica)- 연속적인 id (sequence id)를 offset이라고 한다.- Consumer 입장에서는 각각의 Partition에 해당하는 offset의 데이터를 가지고 와서 소비를 한다.- 하나의 Partition 당 하나의 Consumer가 소비를 하는 것이 제일 이상적인 모습이다.- 데이터가 밀리거나 처리가 안되는 것을 확인하기 위해서는 lag을 확인을 하면 된다.- Prdoucer가 Part..

Kafka Topic / Message Consumer and Producer 명령어

Queue로 사용되는 Kafka의 기본 유틸 Shell Command에 대해서 알아보자. 생성./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 리스트 보기./bin/kafka-topics.sh --list --zookeeper localhost:2181 메세지 생성하기./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 메세지 소비하기./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from..

Zero Copy

Zero Copyhttps://www.ibm.com/developerworks/linux/library/j-zerocopy/kafka 고 성능 Message Queue를 구현하기 위해 Zero-Copy 기능을 활용일반적인 데이터 전송 방식File.read(fileDesc, buf, len);Socket.send(socket, buf, len);기존의 일반적인 데이터 복사 형식Kernel 에서 Application으로 데이터를 복사하고 Application 쪽에서는 Kernel로 데이터를 복사한다.context-switch 및 복사로 인해 성능이 느려질수가 있다.Zero Copy 데이터 전송 방식public void transferTo(long position, long count, WritableByte..