본문 바로가기

Kafka

[Kafka] Replication (1) Broker에 장애가 발생할 경우, 장애가 발생한 Broker의 Partition들은 모두 사용할 수 없게 되는 문제가 발생하여 Producer는 데이터를 전송할 수 없고, Consumer는 데이터를 받아서 처리할 수 없다. 또한, 장애가 발생하면 CURRENT-OFFSET, LOG-END-OFFSET, Consumer Lag 등의 정보들도 사라지게 된다. -> 다른 Broker에서 장애가 발생한 Partition을 대신해서 새로운 Partition을 만들어도 장애가 해결되지 않는 이유(OFFSET 정보, 기존 정보들은 복수할 수 없다) Replication 위 상황을 대비하기 위한 기술로, Partition을 복제하여 다른 Broker 상에 복제물(Replicas)을 만들어서 장애를 미리 대비한다. 메.. 더보기
[Kafka] Consumer (2) 지난 글 요약 Consumer는 메시지를 가져오기 위해서 Partition에 연속적으로 Poll을 하고 가져온 위치를 나타내는 offset 정보를 __consumer_offsets Topic에 저장하여 관리한다. 동일한 group.id로 구성된 모든 Consumer들은 하나의 Consumer Group을 형성하고 Consumer Group의 Consumer들은 작업량을 어느 정도 균등하게 분할한다. 이때, 데이터는 Partition에 균등하게 존재해야 한다. 동일한 Topic에서 Consume 하는 여러 Consumer Group이 존재할 수 있다. Partition Assignment Partition을 Consumer에게 Assign(할당)할 때 하나의 Partition은 지정된 Consumer Gr.. 더보기
[Kafka] Consumer (1) Partition으로부터 Record(데이터)를 가져와서 활용하는 애플리케이션 Consumer는 각각의 고유의 속도로 Partition(Commit Log)으로부터 순서대로 Read를 수행한다. * Consumer Group 다른 Consumer Group에 속한 Consumer들은 서로 관련이 없으며(독립적), Partition에 있는 Event(Message)를 동시에 다른 위치에서 Read 할 수 있다. Consumer Group은 각 Consumer의 Group Id가 같은 Consumer의 모임이다. Consumer Group의 Consumer들은 작업량을 어느 정도 균등하게 분할한다. * Consumer Offset: Consumer Group이 읽은 위치를 표시한다. Consumer가 자동이.. 더보기
[Kafka] Producer (2) Producer Acks Producer Parameter 중 하나 Producer에서 Kafka가 메시지를 잘 전달받았는지 확인할 수 있는 방법 acks 설정은 요청이 성공할 때를 정의하는 데 사용되는 Producer Parameter이다. * acks = 0 -> ack가 필요하지 않음(주로 사용되지 않지만, 메시지 손실이 다소 있더라도 메시지를 빠르게 보내야 할 때 사용한다.) * acks = 1(default) -> Leader가 메시지를 수신하면 ack를 보낸다. Leader가 Producer에게 ACK를 보낸 후, Follower가 복제하기 전에 Leader에 장애가 발생하면 메시지가 손실된다. (최대 한 번 전송을 보장한다.) * acks = -1 : acks = all 동일한 옵션, Pro.. 더보기
[Kafka] Producer (1) 메시지를 생산(Produce)해서 Kafka의 Topic으로 메시지를 보내는 애플리케이션 * Producer와 Consumer는 서로 알지 못해, 각각의 고유 속도로 Partition(Commit Log)에 Write 및 Read를 수행한다. Record Producer가 전송하는 데이터 Message = Record = Event = Data Headers = Metadata, Key + Value = Body Data Key + Value = Json, Avro 등 다양한 형태가 가능하다. ** Kafka는 Record를 Byte Array로만 저장한다. Producer 라이브러리가 입력 받은 데이터를 Serializer 작업을 진해해서 Byte Array로 데이터를 전달한다. 내부 동작 1. Cli.. 더보기
[Kafka] Apache Kafka란? 데이터가 흐르는 Event Streams를 받아 해당 데이터를 필요로 하는 곳으로 전송해주는 시스템이다. 한마디로, 움직이는 데이터를 처리하는 플랫폼(Event Streaming Platform) Event: 서비스에서 일어나는 모든 데이터를 의미한다. 빅데이터의 특징을 가진다. -> 서비스 모든 영역에서 광범위하게 발생하기 때문에 대용량의 데이터가 발생한다. Ex) 웹 사이트에서 무언가를 클릭하는 것, 위치 정보, 고객 정보 등... Event Streams: 연속적인 많은 Event들의 흐름 Kafka 주요 특징 1. Event Stream을 안전하게 전송한다. (Publish & Subscribe) 2. Event Stream을 디스크에 저장한다. (디스크에 저장하면서 매우 빠른 속도의 데이터 전송.. 더보기