kafka 자체로 고성능 전송처리를 간편하게 이용할수 있으며

kafka client를 통하여 여러 플랫폼에서 전송 처리가 가능합니다.

kafka 기능을 Actor혹은 Akka Stream과 연동하여 조금더 유연하고 커스텀한

메시지 처리기능을 만들어 보겠습니다. 이것을 하기전

kafka를 기본적으로 사용하는 방법부터 간단하게 알아 보겠습니다.


AkkaStream은 흐름을 합하고, 분기하는 Graph-DSL 개념을 사용하여 복잡한형태의

스트림처리를 단순화할수 있습니다.  이것은 양끝단은 안정된 스트림서비스를 사용하고

스트림처리의 중간과정을 커스텀화할수 있습니다. 예를 들어 중간에 흐름을 제어하는

중간 벨브(throttle)를 간단하게 추가할수가 있습니다. 

준비하기

1.설치

카프카 서버 준비하기 :


2.솔류션내 라이브러리 설치(.net)


KAFKA 사용하기

using KafkaNet;
  var options = new KafkaOptions(new Uri("http://localhost:9092"), new Uri("http://localhost:9092"));
  var router = new BrokerRouter(options);
  var client = new Producer(router);
  client.SendMessageAsync("test", new[] { new Message("hello world") }).Wait(); 

var options = new KafkaOptions(new Uri("http://localhost:9092"), new Uri("http://localhost:9092"));
var router = new BrokerRouter(options);
var consumer = new Consumer(new ConsumerOptions("TestHarness", router));

//Consume returns a blocking IEnumerable (ie: never ending stream)
foreach (var message in consumer.Consume())
{
    Console.WriteLine("Response: P{0},O{1} : {2}", 
        message.Meta.PartitionId, message.Meta.Offset, message.Value);  
}

KAFKA는 메시지를 생산하는 생산자(Producer)

그리고 쌓인 메시지를 처리하는 소비자(Consumer) 로 구분하며

그것을 중계하는 서비스를 구동하는 아주 직관적인 메시지 큐 솔류션입니다.

KAFKA를 AKKA.net에서 확장하기

KAFKA의 기본 메시지 큐를 이용하여

다음과 같이AKKA를 통해 확장할것입니다.





KAKFA를 AKKA(JAVA/SCALA)에서 확장하기

akka-stream-kafka는 현재 akka stream의 서브 프로젝트로  kafka client보다

더 유연한 사용패턴을 제공해줍니다. 외부 stream 서비스를 사용시 이것을 사용하는

시스템도 비동기 스트림처리기가 존재할시 더 유연하게 상호 운영이됩니다.


참고 : https://doc.akka.io/docs/akka-stream-kafka/current/producer.html

Akka Streams는 내부적으로 Reactive Streams 인터페이스를 사용하며, AKKA를 사용하는 최종 사용자를

대상으로 제공되며 두 인터페이스는 다르지만

서로 다른 스트리밍 구현이 상호 운영될수 있도록하는 Reactive Streams의 프로젝트의 기대치와  일치합니다. 

http://www.reactive-streams.org/