Azure Event Hubs + Kafka API 사용하기
Event hubs 프로토콜
- AMQP
- (ex). RabbitMQ : AMQP 기반 메시지 브로커
- RabbitMQ 는 AMQP, MQTT, STOMP, WebSockets 멀티 프로토콜을 지원함.
- HTTP
- Kafka API - Kafka Wire Protocol (자체 프로토콜)
브로커 설정
- Kafka broker 의 topic 은 한 개 이상의 partition 으로 구성되어 있다.
- replication.factor 로 리더 파티션과 팔로워 파티션의 수를 조정할 수 있다.
- Event Hubs 에서 replication.factor 는 3이다. (조정 불가능)
- min.insync.replicas 값을 통해 ACKS=all 을 반환하기 위한 최소 ISR 값을 설정할 수 있다.
kafka producer
- ACKS 값을 통해 메시지 안정성을 설정할 수 있다.
- acks=0 : Producer가 메시지를 보내기만 하고, 브로커의 응답(ACK)을 기다리지 않음. (최대 성능, 데이터 유실 가능)
- acks=1 : 리더 브로커가 메시지를 받으면 즉시 ACK 반환. (빠르지만, 리더 장애 시 데이터 손실 가능)
- acks=all : 모든 ISR(In-Sync Replica)에 메시지가 저장될 때까지 ACK 반환. (가장 안전한 설정)
Message delievery semantics
- 메시지 전송 전략, 메시지 전달 안정성과 성능의 trade-off
- Producer 설정을 통해 전략을 설정할 수 있음.
- at-most-once : acks=0, retries=0
- at-least-once: acks=all, retries=many
- exactly-once: enable.idempotence=true, transactional.id=id
- Q) 시스템에서 적절한 메시지 전송 전략은 무엇일까?