>  기사  >  Java  >  인터뷰 관점에서 완성된 Kafka

인터뷰 관점에서 완성된 Kafka

Java后端技术全栈
Java后端技术全栈앞으로
2023-08-24 15:22:041031검색

Kafka는 뛰어난 분산 메시지 미들웨어입니다. Kafka는 메시지 통신을 위해 많은 시스템에서 사용됩니다. 분산 메시징 시스템을 이해하고 사용하는 것은 백엔드 개발자에게 거의 필요한 기술이 되었습니다. 오늘은 码哥字节 일반적인 Kafka 면접 질문부터 시작해서 Kafka에 대해 이야기해보겠습니다.

인터뷰 관점에서 완성된 Kafka
마인드 맵

분산 메시지 미들웨어에 대해 이야기해 주세요

Questions

  • 분산 메시지 미들웨어란 무엇인가요?
  • 메시지 미들웨어의 역할은 무엇인가요?
  • 메시지 미들웨어의 사용 시나리오는 무엇입니까?
  • 메시지 미들웨어 선택?
인터뷰 관점에서 완성된 Kafka
Message Queue

분산 메시징은 RPC, HTTP, RMI 등과 달리 분산 중간 에이전트를 사용하여 통신하는 메커니즘입니다. 그림에서 볼 수 있듯이, 업스트림 비즈니스 시스템은 메시지 미들웨어를 사용한 후 메시지를 보내고, 메시지는 먼저 메시지 미들웨어에 저장되며, 메시지 미들웨어는 해당 메시지를 해당 비즈니스 모듈 애플리케이션에 배포합니다(분산 생산자-소비자 모델). 이 비동기식 접근 방식은 서비스 간의 결합을 줄입니다.

인터뷰 관점에서 완성된 Kafka
Architecture

메시지 미들웨어 정의:

  • 플랫폼 독립적인 데이터 교환을 위해 효율적이고 안정적인 메시지 전달 메커니즘을 활용합니다.
  • 데이터 통신을 기반으로 분산 시스템을 통합합니다.
  • 메시지 전달 및 메시지 큐잉 모델을 제공하여 분산 환경에서 사용할 수 있습니다. 프로세스 간 통신 확장

시스템 아키텍처에서 추가 구성 요소를 참조하면 필연적으로 시스템의 아키텍처 복잡성이 증가하고 운영 및 유지 관리가 어려워집니다. 그렇다면 시스템에서 분산 메시징 미들웨어를 사용하면 어떤 이점이 있을까요? 시스템에서 메시지 미들웨어의 역할은 무엇입니까? ㅋㅋㅋ 주문 보장

  • 버퍼링
  • 비동기 통신
  • 면접 중에 면접관은 면접관의 오픈 소스 구성 요소 선택 능력에 관심을 갖는 경우가 많습니다. 이는 면접관의 지식의 폭뿐만 아니라 특정 유형의 시스템에 대한 면접관의 지식의 깊이도 테스트할 수 있으며 이를 통해 확인할 수도 있습니다. 면접관이 시스템 전반과 시스템 아키텍처 설계를 파악하는 능력을 갖추고 있다는 것입니다. 많은 오픈 소스 분산 메시징 시스템이 있으며 다양한 메시징 시스템에는 서로 다른 특성이 있습니다. 메시징 시스템을 선택하려면 각 메시징 시스템에 대한 특정 이해뿐만 아니라 자체 시스템 요구 사항에 대한 명확한 이해도 필요합니다.
  • 다음은 몇 가지 일반적인 분산 메시징 시스템을 비교한 것입니다.
    인터뷰 관점에서 완성된 Kafka
    Select

    답변 키워드

    • 분산 메시징 미들웨어란? 통신, 큐, 분산, 생산자-소비자 모델.
    • 메시지 미들웨어의 역할은 무엇인가요? 디커플링, 피크 처리, 비동기 통신, 버퍼링.
    • 메시지 미들웨어의 사용 시나리오는 무엇입니까? 비동기 통신, 메시지 저장 및 처리.
    • 메시지 미들웨어 선택? 언어, 프로토콜, HA, 데이터 신뢰성, 성능, 트랜잭션, 생태학, 단순성, 푸시풀 모드.

    Kafka 기본 개념과 아키텍처

    Question

    • Kafka의 아키텍처에 대해 간략하게 이야기해 주세요.
    • Kafka는 푸시 모드인가요, 풀 모드인가요? 푸시와 풀의 차이점은 무엇인가요?
    • Kafka는 어떻게 메시지를 방송하나요?
    • 카프카의 메시지는 순서대로 있나요?
    • Kafka는 읽기 및 쓰기 분리를 지원하나요?
    • Kafka는 어떻게 높은 데이터 가용성을 보장하나요?
    • 카프카에서 사육사의 역할은 무엇인가요?
    • 거래를 지원하나요?
    • 파티션 수를 줄일 수 있나요?

    Kafka 아키텍처의 일반 개념:

    인터뷰 관점에서 완성된 Kafka
    Architecture
    • 프로듀서: 메시지를 보내는 당사자인 프로듀서. 생산자는 메시지를 생성한 후 Kafka로 보내는 일을 담당합니다.
    • Consumer: Consumer, 즉 메시지를 받는 당사자. 소비자는 Kafka에 연결하여 메시지를 받은 후 해당 비즈니스 논리 처리를 수행합니다.
    • 소비자 그룹: 소비자 그룹에는 하나 이상의 소비자가 포함될 수 있습니다. 다중 파티션 + 다중 소비자 접근 방식을 사용하면 다운스트림 데이터의 처리 속도를 크게 향상시킬 수 있습니다. 동일한 소비자 그룹의 소비자는 메시지를 반복적으로 소비하지 않습니다. 마찬가지로 다른 소비자 그룹의 소비자가 보낸 메시지는 서로 영향을 미치지 않습니다. Kafka는 소비자 그룹을 통해 메시지 P2P 모드와 브로드캐스트 모드를 구현합니다.
    • 브로커: 서비스 프록시 노드. Broker는 Kafka의 서비스 노드, 즉 Kafka의 서버입니다.
    • Topic: Kafka의 메시지는 Topic 단위로 구분됩니다. 생산자는 특정 Topic에 메시지를 보내고, Consumer는 Topic의 메시지를 구독하고 소비할 책임이 있습니다.
    • 파티션: 주제는 여러 파티션으로 세분화될 수 있는 논리적 개념이며, 각 파티션은 하나의 주제에만 속합니다. 동일한 주제 아래의 서로 다른 파티션에는 서로 다른 메시지가 포함됩니다. 파티션은 스토리지 수준에서 추가 가능한 로그 파일로 간주될 수 있습니다. 메시지가 파티션 로그 파일에 추가되면 특정 오프셋이 할당됩니다.
    • Offset은 파티션 내 메시지의 고유 식별자입니다. Kafka는 이를 파티션 내 메시지 순서를 보장하는 데 사용합니다. 즉, Kafka는 순서를 보장하지 않습니다. 주제별 순서가 아닌 파티션의 순서입니다.
    • 복제: 복제본은 동일한 Kafka 파티션의 데이터가 여러 브로커에 여러 복사본을 가질 수 있는 Kafka의 방법입니다. 일반적으로 기본 복사본은 브로커에서 외부 읽기 및 쓰기 서비스를 제공합니다. 충돌이 발생하거나 네트워크 오류가 발생하면 Kafka는 컨트롤러 관리 하에 새로운 리더 복제본을 다시 선택하여 외부 읽기 및 쓰기 서비스를 제공합니다.
    • Record: 실제로 Kafka에 기록되고 읽을 수 있는 메시지 레코드입니다. 각 레코드에는 키, 값 및 타임스탬프가 포함됩니다.

    Kafka Topic 파티션 레이아웃

    인터뷰 관점에서 완성된 Kafka
    topic

    Kafka 파티션 Topic, 파티션을 동시에 읽고 쓸 수 있습니다.

    Kafka 소비자 오프셋

    인터뷰 관점에서 완성된 Kafka
    consumer offset

    zookeeper

    인터뷰 관점에서 완성된 Kafka
    zookeeper
    • 브로커는 분산 배포되며 서로 독립적입니다.
    • 토픽 등록: Kafka에서는 동일한 토픽의 메시지가 여러 파티션으로 나누어져 여러 브로커에 배포됩니다. 이러한 파티션 정보와 브로커와의 해당 관계도 Zookeeper
    • 생산자 로드 밸런싱에 의해 유지됩니다. 동일한 Topic 메시지가 여러 브로커에 분할되어 배포되므로 생산자는 분산된 브로커에 메시지를 합리적으로 보내야 합니다.
    • 소비자 로드 밸런싱: 생산자와 마찬가지로 Kafka의 소비자도 해당 브로커 서버에서 메시지를 합리적으로 수신하기 위해 여러 소비자를 달성하기 위해 로드 밸런싱이 필요합니다. 각 메시지는 한 명의 소비자에게만 전송됩니다. 그룹 내에서 서로 다른 소비자 그룹은 서로 간섭하지 않고 고유한 특정 주제에 따라 메시지를 소비합니다.

    답변 키워드

    • 카프카의 아키텍처에 대해 간단히 이야기해볼까요?

      Producer, Consumer, Consumer Group, Topic, Partition

    • Kafka 푸시 모드인가요, 풀 모드인가요?

      Kafka Producer는 Push 모드를 사용하여 Broker에 메시지를 보내고 Consumer는 Pull 모드를 사용하여 소비합니다. 풀 모드를 사용하면 소비자가 오프셋을 스스로 관리할 수 있어 읽기 성능을 제공할 수 있습니다

    • Kafka는 어떻게 메시지를 브로드캐스트하나요?

      소비자 단체

    • 카프카의 메시지는 순서대로 되어 있나요?

      주제 수준은 순서가 없고 파티션은 순서가 있습니다.

    • Kafka는 읽기-쓰기 분리를 지원합니까?

      지원되지 않으며 Leader만이 외부 읽기 및 쓰기 서비스를 제공합니다.

    • Kafka는 어떻게 높은 데이터 가용성을 보장합니까?

      Copy, ack, HW

    • 카프카에서 사육사의 역할은?

      클러스터 관리, 메타데이터 관리

    • 트랜잭션을 지원하나요?

      0.11 이후에는 트랜잭션이 지원되며 "정확히 한 번" 달성할 수 있습니다

    • 파티션 수를 줄일 수 있나요?

      아니요, 데이터가 손실됩니다

    Kafka를 사용하여

    Questions

    • Kafka용 명령줄 도구는 무엇인가요? 어떤 것을 사용해 보셨나요?
    • 카프카 프로듀서의 실행 과정은?
    • Kafka Producer의 일반적인 구성은 무엇입니까?
    • Kafka 메시지를 순서대로 유지하는 방법은 무엇입니까?
    • Producer는 데이터가 손실 없이 전송되도록 어떻게 보장하나요?
    • 프로듀서의 퍼포먼스를 향상시키는 방법은 무엇인가요?
    • 동일 그룹 내 소비자 수가 부품 수보다 많은 경우 Kafka는 어떻게 처리하나요?
    • Kafka Consumer는 스레드로부터 안전합니까?
    • Kafka Consumer를 사용하여 메시지를 소비할 때 스레드 모델에 대해 알려주세요. 왜 이렇게 설계되나요?
    • Kafka Consumer의 일반적인 구성은 무엇입니까?
    • Consumer는 언제 클러스터에서 쫓겨날까요?
    • Consumer가 가입하거나 탈퇴할 때 Kafka는 어떻게 반응합니까?
    • 리밸런스란 무엇이며 언제 리밸런스가 발생하나요?

    명령줄 도구

    Kafka의 명령줄 도구는 Kafka 패키지의 /bin 디렉터리에 있으며, 주로 서비스 및 클러스터 관리 스크립트, 구성 스크립트, 정보 보기 스크립트, 주제 스크립트, 클라이언트 스크립트 등이 포함되어 있습니다. .

    • kafka-configs.sh: 구성 관리 스크립트
    • kafka-console-consumer.sh: kafka 소비자 콘솔
    • kafka-console-producer.sh: kafka 생산자 콘솔
    • kafka-consumer- groups.sh: kafka 소비자 그룹 관련 정보
    • kafka-delete-records.sh: 저수위 로그 파일 삭제
    • kafka-log-dirs.sh: kafka 메시지 로그 디렉터리 정보
    • kafka- mirror-maker.sh: 다양한 데이터 센터의 kafka 클러스터 복제 도구
    • kafka-preferred-replica-election.sh: 선호 복제본 선택 트리거
    • kafka-producer-perf-test.sh: kafka 생산자 성능 테스트 script
    • kafka-resign-partitions.sh: 파티션 재할당 스크립트
    • kafka-replica-verification.sh: 복제 진행 확인 스크립트
    • kafka-server-start.sh: kafka 서비스 시작
    • kafka-server-stop.sh: kafka 서비스 중지
    • kafka-topics.sh: 주제 관리 스크립트
    • kafka-verifying-consumer.sh: 검증 가능한 kafka 소비자
    • kafka-verifying- producer.sh: 검증 가능한 kafka 생산자
    • zookeeper-server-start.sh: zk 서비스 시작
    • zookeeper-server-stop.sh: zk 서비스 중지
    • zookeeper-shell.sh: zk 클라이언트

    대개 kafka-console-consumer.shkafka-console-producer.sh脚本来测试 Kafka 生产和消费,kafka-consumer-groups.sh可以查看和管理集群中的 Topic,kafka-topics.shKafka의 소비자 그룹 상태를 보는 데 사용됩니다.

    Kafka Producer

    Kafka 생산자의 일반적인 생산 로직에는 다음 단계가 포함됩니다.

    1. 공통 생산자 인스턴스에 대한 생산자 클라이언트 매개변수를 구성합니다.
    2. 전송할 메시지를 작성하세요.
    3. 메시지를 보내세요.
    4. 생산자 인스턴스를 닫습니다.

    Producer가 메시지를 보내는 과정은 아래 그림과 같으며 일괄적으로 Broker에 보내야 합니다. 拦截器序列化器分区器,最终由累加器

    인터뷰 관점에서 완성된 Kafkaproducer
    Kafka Producer에는 다음과 같은 필수 매개변수가 필요합니다.

    • bootstrap.server: Kafka 브로커의 주소 지정
    • key.serializer: 키 직렬 변환기
    • value . 직렬 변환기:값 직렬 변환기
    공통 매개변수:

    • batch.num.messages

      기본값: 200, 각 배치의 메시지 수, 비동기식에서만 작동합니다.

    • request.required.acks

      기본값: 0, 0은 생산자가 리더의 확인을 기다릴 필요가 없음을 의미하고, 1은 리더가 로컬 로그에 대한 쓰기를 확인하고 즉시 확인해야 함을 의미하며, -1은 생산자가 확인해야 함을 의미합니다. 모든 백업이 완료된 후. 이는 비동기 모드에서만 작동합니다. 이 매개변수의 조정은 데이터 손실과 전송 효율성 사이의 균형입니다. 데이터 손실에 민감하지 않지만 효율성을 고려하는 경우 0으로 설정하면 효율성이 크게 향상될 수 있습니다. 데이터를 보내는 생산자.

    • request.timeout.ms

      기본값: 10000, 확인 시간 초과.

    • partitioner.class

      기본값: kafka.producer.DefaultPartitioner, kafka.producer.Partitioner를 구현해야 하며 키를 기반으로 분할 전략을 제공합니다. 동일한 유형의 메시지를 순차적으로 처리해야 하는 경우가 있으므로 동일한 유형의 데이터를 동일한 파티션에 할당하도록 할당 전략을 사용자 정의해야 합니다.

    • producer.type

      기본값: sync는 메시지가 동기적으로 전송되는지 또는 비동기적으로 전송되는지 여부를 지정합니다. 비동기 비동기 일괄 전송에는 kafka.producer.AyncProducer를 사용하고 동기 동기화에는 kafka.producer.SyncProducer를 사용합니다. 동기식 및 비동기식 전송은 메시지 생성 효율성에도 영향을 미칩니다.

    • compression.topic

      기본값: 없음, 메시지 압축, 기본적으로 압축 안 함. 다른 압축 방법으로는 "gzip", "snappy" 및 "lz4"가 있습니다. 메시지를 압축하면 네트워크 전송량과 네트워크 IO가 크게 줄어들어 전반적인 성능이 향상됩니다.

    • compressed.topics

      기본값: null 압축이 설정되면 특정 주제 압축을 지정할 수 있습니다. 지정하지 않으면 모든 압축이 수행됩니다.

    • message.send.max.retries

      기본값: 3, 최대 메시지 전송 시도 횟수.

    • retry.backoff.ms

      기본값: 300, 각 시도에 추가 간격이 추가됩니다.

    • topic.metadata.refresh.interval.ms

      기본값: 600000, 정기적으로 메타데이터를 얻는 시간. 파티션이 손실되고 리더를 사용할 수 없는 경우 생산자는 메타데이터도 적극적으로 얻습니다. 0인 경우 메시지가 전송될 때마다 메타데이터를 얻습니다. 이는 권장되지 않습니다. 음수인 경우 실패 시에만 메타데이터를 가져옵니다.

    • queue.buffering.max.ms

      기본값: 5000, 생산자 대기열에서 데이터를 캐싱하는 최대 시간, asyc에만 해당.

    • queue.buffering.max.message

      기본값: 10000, 생산자가 캐시하는 최대 메시지 수, 비동기식에만 해당됩니다.

    • queue.enqueue.timeout.ms

      기본값: -1, 0은 대기열이 가득 차면 폐기되고, 음수 값은 대기열이 가득 차면 블록이고, 양수 값은 대기열이 가득 차면 해당 블록의 시간입니다. 비동기식의 경우에만 해당됩니다.

    Kafka Consumer

    Kafka에는 소비자 그룹이라는 개념이 있습니다. 각 소비자는 할당된 파티션의 메시지만 사용할 수 있으며, 각 파티션은 소비자 그룹에서 한 명의 소비자만 사용할 수 있습니다. 따라서 동일한 소비자 그룹의 소비자 수가 파티션 수를 초과하는 경우 일부 소비자에게는 사용할 수 없는 파티션이 할당됩니다. 소비자 그룹과 소비자 간의 관계는 아래 그림에 나와 있습니다.

    인터뷰 관점에서 완성된 Kafka
    consumer group

    Kafka Consumer 클라이언트가 메시지를 소비하는 단계는 일반적으로 다음 단계로 구성됩니다.

    1. 클라이언트 구성, 소비자 생성
    2. 구독 topic
    3. 메시지를 가져와 소비합니다
    4. 소비 변위 제출
    5. 소비자 인스턴스 닫기
    인터뷰 관점에서 완성된 Kafka
    Process

    Kafka의 소비자 클라이언트는 스레드로부터 안전하기 때문입니다. 스레드를 보장하기 위해 소비 성능 향상을 위해 Consumer 측에서 Reactor와 유사한 스레드 모델을 사용하여 데이터를 소비할 수 있습니다.

    인터뷰 관점에서 완성된 Kafka
    소비 모델

    Kafka 소비자 매개변수

    • bootstrap.servers: 연결 브로커 주소, 호스트:포트 형식. host:port 格式。
    • group.id:消费者隶属的消费组。
    • key.deserializer:与生产者的key.serializer对应,key 的反序列化方式。
    • value.deserializer:与生产者的value.serializer对应,value 的反序列化方式。
    • session.timeout.ms:coordinator 检测失败的时间。默认 10s 该参数是 Consumer Group 主动检测 (组内成员 comsummer) 崩溃的时间间隔,类似于心跳过期时间。
    • auto.offset.reset:该属性指定了消费者在读取一个没有偏移量后者偏移量无效(消费者长时间失效当前的偏移量已经过时并且被删除了)的分区的情况下,应该作何处理,默认值是 latest,也就是从最新记录读取数据(消费者启动之后生成的记录),另一个值是 earliest,意思是在偏移量无效的情况下,消费者从起始位置开始读取数据。
    • enable.auto.commit:否自动提交位移,如果为false,则需要在程序中手动提交位移。对于精确到一次的语义,最好手动提交位移
    • fetch.max.bytes:单次拉取数据的最大字节数量
    • max.poll.records:单次 poll 调用返回的最大消息数,如果处理逻辑很轻量,可以适当提高该值。但是max.poll.records
    • group.id: 소비자가 속한 소비자 그룹입니다.
      🎜🎜🎜key.deserializer: key.serializer는 키의 역직렬화 방법에 해당합니다. 🎜🎜🎜🎜value.deserializer: value.serializer는 value의 역직렬화 방법에 해당합니다. 🎜🎜🎜🎜session.timeout.ms: 코디네이터 감지에 실패한 시간입니다. 기본값은 10초입니다. 이 매개변수는 하트비트 만료 시간과 유사하게 소비자 그룹(comsummer, 그룹의 구성원) 충돌을 적극적으로 감지하는 시간 간격입니다. 🎜🎜🎜🎜auto.offset.reset: 이 속성은 소비자가 오프셋이 없고 오프셋이 유효하지 않은 파티션을 읽고 있음을 지정합니다(소비자의 현재 오프셋이 오랫동안 만료되어 만료되어 삭제되었습니다). 이 경우 어떻게 해야 합니까? 기본값은 최신입니다. 이는 최신 레코드(소비자가 시작된 후 생성된 레코드)에서 데이터를 읽는 것을 의미합니다. 이는 오프셋이 유효하지 않을 때 소비자가 또는 시작 위치부터 데이터 읽기를 시작합니다. 🎜🎜🎜🎜enable.auto.commit: false인 경우 프로그램에서 수동으로 변위를 제출해야 합니다. 정확한 한 번 의미 체계의 경우 변위를 수동으로 제출하는 것이 좋습니다. 🎜🎜🎜🎜fetch.max.bytes: 한 번에 가져온 데이터의 최대 바이트 수 🎜🎜🎜🎜max.poll.records: 반환된 최대 메시지 단일 폴 호출로 처리 논리가 매우 가벼운 경우 이 값을 적절하게 늘릴 수 있습니다. 그러나max.poll. 기록 데이터는 session.timeout.ms 내에서 처리되어야 합니다. 기본값은 500🎜🎜🎜🎜request.timeout.ms입니다: 요청 응답을 위한 최대 대기 시간입니다. 제한 시간 내에 응답이 수신되지 않으면 Kafka는 메시지를 다시 보내거나 재시도 횟수가 초과되면 직접 실패합니다.

    Kafka Rebalance

    rebalance는 본질적으로 소비자 그룹 아래의 모든 소비자가 구독 주제의 각 파티션을 할당하기로 합의할 수 있는 방법을 규정하는 프로토콜입니다. 예를 들어, 특정 그룹에는 20명의 소비자가 있고 100개의 파티션이 있는 주제를 구독합니다. 일반적인 상황에서 Kafka는 각 소비자에게 평균 5개의 파티션을 할당합니다. 이 할당 프로세스를 재조정이라고 합니다.

    언제 리밸런싱을 해야 할까요?

    이것도 자주 언급되는 질문이에요. 재조정에는 세 가지 트리거 조건이 있습니다.

    • 그룹 구성원 변경(새로운 소비자가 그룹에 합류, 기존 소비자가 자발적으로 그룹을 떠나거나 기존 소비자 충돌 - 둘 사이의 차이점은 나중에 논의됨)
    • 구독 주제 파티션 개수가 변경되었습니다
    • 주제에 가입된 파티션 수가 변경되었습니다

    그룹 내에서 파티션을 할당하는 방법은 무엇인가요?

    Kafka는 기본적으로 Range와 Round-Robin이라는 두 가지 할당 전략을 제공합니다. 물론 Kafka는 플러그형 할당 전략을 채택하고 사용자가 자신만의 할당자를 만들어 다양한 할당 전략을 구현할 수 있습니다.

    답변 키워드

    • Kafka용 명령줄 도구는 무엇인가요? 어떤 것을 사용해 보셨나요? /bin디렉토리, 카프카 클러스터 관리, 토픽 관리, 카프카 생산 및 소비
    • 카프카 프로듀서의 실행 과정은? 인터셉터, 직렬 변환기, 파티셔너 및 누산기
    • Kafka Producer의 일반적인 구성은 무엇입니까? 브로커 구성, ack 구성, 네트워크 및 전송 매개변수, 압축 매개변수, ack 매개변수
    • Kafka 메시지를 순서대로 유지하는 방법은 무엇입니까? Kafka 자체는 토픽 수준에서 정렬되지 않고 파티션에서만 정렬됩니다. 따라서 처리 순서를 보장하기 위해 파티셔너를 사용자 정의하고 순차적으로 처리해야 하는 데이터를 동일한 파티션으로 보낼 수 있습니다. 데이터가 원활하게 전송되는지 확인하시겠습니까? ack 메커니즘, 재시도 메커니즘
    • Producer의 성능을 향상시키는 방법은 무엇입니까? 배치, 비동기, 압축
    • 동일 그룹의 소비자 수가 부품 수보다 많으면 Kafka는 어떻게 처리하나요? 중복 부분은 쓸모 없는 상태가 되며 데이터를 소비하지 않습니다.
    • Kafka Consumer는 스레드로부터 안전합니까? 안전하지 않은 단일 스레드 소비, 멀티 스레드 처리
    • Kafka Consumer를 사용하여 메시지를 소비할 때 스레드 모델에 대해 알려주세요. 왜 이렇게 설계되나요? 풀링(Pull)과 프로세싱의 분리
    • Kafka Consumer의 공통 구성은? 브로커, 네트워크 및 끌어오기 매개변수, 하트비트 매개변수
    • 소비자는 언제 클러스터에서 쫓겨날까요? 충돌, 네트워크 이상, 긴 처리 시간, 제출 대체 시간 초과
    • Consumer가 가입하거나 탈퇴할 때 Kafka는 어떻게 반응합니까? 리밸런싱 수행
    • 리밸런스란 무엇이며 리밸런싱은 언제 발생하나요? 주제 변경, 소비자 변경
    • 고가용성 및 성능

    Questions

    Kafka는 어떻게 고가용성을 보장하나요?

    • Kafka의 전달 의미는?
    • Replic은 무엇을 하나요?
    • AR, ISR 무슨 문제야?
    • 리더와 플라워는 무엇인가요?
    • Kafka에서 HW, LEO, LSO, LW 등은 무엇을 의미하나요?
    • Kafka는 뛰어난 성능을 보장하기 위해 어떤 처리를 했나요?

    파티션 및 복제본

    인터뷰 관점에서 완성된 Kafka
    파티션 복제본

    분산 데이터 시스템에서 파티션은 일반적으로 시스템의 처리 용량을 향상시키고 복제본을 통해 데이터의 고가용성을 보장하는 데 사용됩니다. 다중 분할은 이러한 여러 복사본 중에서 하나만이 리더이고 나머지는 팔로어 복사본인 것을 동시에 처리하는 기능을 의미합니다. 리더 카피만이 외부 세계에 서비스를 제공할 수 있습니다. 여러 팔로워 복사본은 일반적으로 리더 복사본과 다른 브로커에 저장됩니다. 이 메커니즘을 통해 시스템이 중단되면 다른 후속 복사본이 신속하게 "정상으로 전환"되어 외부 세계에 서비스 제공을 시작할 수 있습니다.

    팔로워 카피는 왜 읽기 서비스를 제공하지 않나요?

    이 문제는 본질적으로 성능과 일관성 사이의 균형입니다. 팔로어 카피가 외부 세계에도 서비스를 제공한다면 어떻게 될까요? 우선 성능이 확실히 좋아질 것이다. 그러나 동시에 일련의 문제가 발생할 것입니다. 데이터베이스 트랜잭션의 팬텀 읽기 및 더티 읽기와 유사합니다. 예를 들어 Kafka 주제 a에 데이터 조각을 쓰는 경우 소비자 b는 주제 a의 데이터를 소비하지만 소비자 b가 읽는 파티션 복사본에 최신 메시지가 기록되지 않았기 때문에 이를 소비할 수 없다는 것을 알게 됩니다. 이때 다른 Consumer c는 Leader Copy를 소비하기 때문에 최신 데이터를 소비할 수 있습니다. Kafka는 WH 및 오프셋 관리를 사용하여 소비자가 사용할 수 있는 데이터와 현재 기록되는 데이터를 결정합니다.

    인터뷰 관점에서 완성된 Kafka
    watermark

    리더만이 외부 읽기 서비스를 제공할 수 있으므로 리더 선출 방법

    kafka에서는 리더 레플리카와 동기화된 레플리카를 ISR 레플리카 세트에 넣습니다. 물론, 리더 사본은 항상 ISR 사본 세트에 존재합니다. 일부 특별한 경우에는 ISR 사본에 리더 사본이 하나만 있습니다. 리더가 실패하면 카카파는 사육사를 통해 이러한 상황을 감지하고, ISR 사본에서 새로운 사본을 선택하여 리더가 되어 외부 세계에 서비스를 제공한다. 그런데 여기에는 또 다른 문제가 있는데 앞서 언급한 것처럼 ISR 레플리카 세트에 리더만 있을 가능성이 있는데, 이때 리더 레플리카 세트가 비어 있게 됩니다. 이때 unclean.leader.election.enable 파라미터를 true로 설정하면 Kafka는 비동기식 리더가 될 레플리카, 즉 ISR 레플리카 세트에 없는 레플리카를 선택하게 된다.

    사본이 있으면 사본 동기화 문제가 발생합니다

    Kafka는 할당된 모든 복제본(AR)에서 사용 가능한 복제본 목록(ISR)을 유지 관리합니다. 생산자가 브로커에게 메시지를 보내면 ack配置来确定需要等待几个副本已经同步了消息才相应成功,Broker 内部会ReplicaManager 서비스를 기반으로 꽃과 리더 간의 데이터 동기화를 관리합니다.

    인터뷰 관점에서 완성된 Kafka
    sync

    성능 최적화

    • 파티션 동시성
    • 디스크에 순차적 읽기 및 쓰기
    • 페이지 캐시: 페이지 단위로 읽고 쓰기
    • 미리 읽어보세요: Kafka는 사용된 메시지를 미리 메모리로 읽어옵니다
    • 고성능 직렬화(바이너리)
    • 메모리 매핑
    • 잠금 없는 오프셋 관리: 동시성 향상
    • Java NIO 모델
    • 배치: 일괄 읽기 및 쓰기
    • 압축: 메시지 압축, 저장 압축, 네트워크 및 IO 오버헤드 감소

    파티션 동시성

    한편으로는 서로 다른 파티션이 서로 다른 시스템에 위치할 수 있기 때문입니다. , 클러스터의 장점을 최대한 활용하고 기계 간 병렬 처리를 달성할 수 있습니다. 반면, 파티션은 물리적으로 하나의 폴더에 해당하므로 동일한 노드에 여러 개의 파티션이 있더라도 동일한 노드의 서로 다른 파티션을 서로 다른 디스크 드라이브에 배치하여 디스크 간 병렬 처리를 최대한 활용할 수 있습니다. 여러 디스크 중.

    순차 읽기 및 쓰기

    각 파티션 디렉터리의 Kafka 파일은 동일한 크기의 데이터 파일로 균등하게 절단됩니다(기본 파일 크기는 500MB이며 수동으로 설정할 수 있음). 각 데이터 파일을 세그먼트 파일이라고 하며 각 세그먼트는 추가를 사용하여 데이터를 추가합니다.

    인터뷰 관점에서 완성된 Kafka
    데이터 추가

    답변 키워드

    • Kafka는 어떻게 고가용성을 보장하나요?

      복제본을 사용하여 데이터의 고가용성, 생산자 승인, 재시도, 자동 리더 선택, 소비자 자체 균형을 보장합니다.

    • Kafka의 전달 의미는 무엇입니까?

      배달 의미는 일반적으로 at least onceat most onceexactly once입니다. Kafka는 ack 구성을 통해 처음 두 개를 구현합니다.

    • Replic은 무엇을 하나요?

      높은 데이터 가용성 달성

    • AR 및 ISR이란 무엇입니까?

      AR: 할당된 복제본. AR은 토픽 생성 후 파티션 생성 시 할당되는 레플리카 집합이다. 레플리카 개수는 레플리카 인자에 따라 결정된다. ISR: 동기화 복제본. Kafka에서 특히 중요한 개념은 리더와 동기화되는 AR의 복제본 세트를 나타냅니다. AR의 복제본은 ISR에 없을 수도 있지만 Leader 복제본은 당연히 ISR에 포함됩니다. ISR과 관련하여 또 다른 일반적인 인터뷰 질문은 사본이 ISR에 속해야 하는지 여부를 결정하는 방법입니다. 현재 판단은 Follower Replica의 LEO가 Leader의 LEO보다 뒤처지는 시간이 Broker 측 매개변수인 Replica.lag.time.max.ms의 값을 초과하는지 여부에 따라 결정됩니다. 초과되면 복제본이 ISR에서 제거됩니다.

    • 리더와 플라워는 무엇인가요?

    • Kafka에서 HW는 무엇을 의미하나요?

      하이 워터마크. 이는 소비자가 읽을 수 있는 메시지의 범위를 제어하는 ​​중요한 필드입니다. 일반 소비자는 리더 복제본의 로그 시작 오프셋과 HW(독점) 사이의 모든 메시지만 "볼" 수 있습니다. 수위 위의 메시지는 소비자에게 보이지 않습니다.

    • Kafka는 뛰어난 성능을 보장하기 위해 어떤 처리를 했나요?

      파티션 동시성, 디스크 순차 읽기 및 쓰기, 페이지 캐시 압축, 고성능 직렬화(바이너리), 메모리 매핑 잠금 없는 오프셋 관리, Java NIO 모델

    이 기사에서는 구현에 대해 다루지 않습니다. 그러나 Kafka는 실제로 훌륭한 오픈 소스 시스템입니다. 많은 우아한 아키텍처 디자인과 소스 코드 디자인은 배울 가치가 있습니다. 관심 있는 학생들이 이 오픈 소스 시스템에 대해 더 깊이 이해하는 것이 좋습니다. 건축 설계 능력, 코딩 능력, 성능 최적화가 큰 도움이 될 것입니다.

위 내용은 인터뷰 관점에서 완성된 Kafka의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 Java后端技术全栈에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제