Windows 환경 Kafka 설치와 KafkaJS 간단 예제
2021-04-02
Kafka 설치
- Kafka download 검색 혹은 카프카 설치 페이지 방문
- Windows 환경 기준 Binary downloads에 있는 파일 다운로드
- 예시)
Scala 2.12 - kafka_2.12-2.8.0.tgz (asc, sha512)
- 예시)
- 다운로드 완료 후 특정 드라이브 아래에 바로 위치하도록 수정, 디렉토리 명이 길어지면
gradlew jar all
오류가 발생하기 때문- 예시)
C:\kafka
- 예시)
Kafka 실행 및 topic 생성
{Kafka 디렉토리}\bin\windows
로 이동하여.\zookeeper-server-start.bat ..\..\config\zookeeper.properties
로zookeeper
를 실행한다.{Kafka 디렉토리}\bin\windows
에서.\kafka-server-start.bat ..\..\config\server.properties
로kafka
를 실행한다..\kafka-topics.bat --bootstrap-server localhost:9092 --create --topic test-topic --partitions 1 --replication-factor 1
명령어를 사용하여test-topic
이라는 이름으로topic
을 생성한다.topic
을 알맞게 생성하지 않을시 추후에<<[BrokerPool] Failed to connect to seed broker, trying another broker from the list>>
에러를 만나게 된다.
KafkaJS 설치
npm install kafkajs
Node.js
프로젝트에서 위 명령어로 KafkaJS
를 설치한다.
Producer, Consumer 작성
kafka.js
과 같은 이름으로 파일을 하나 생성 후 아래 코드를 작성한다.
const { Kafka } = require("kafkajs");
const kafka = new Kafka({
clientId: "my-app",
brokers: ["localhost:9092"],
});
const producer = kafka.producer();
const consumer = kafka.consumer({ groupId: "test-group" });
const run = async () => {
// Producing
await producer.connect();
await producer.send({
topic: "test-topic",
messages: [{ value: "Hello KafkaJS user!" }],
});
// Consuming
await consumer.connect();
await consumer.subscribe({ topic: "test-topic", fromBeginning: true });
await consumer.run({
eachMessage: async ({ topic, partition, message }) => {
console.log({
partition,
offset: message.offset,
value: message.value.toString(),
});
},
});
};
run().catch(console.error);
이후 콘솔에서 node kafka.js
명령어로 실행하면 아래와 비슷한 결과를 만날 수 있다.
{"level":"INFO","timestamp":"2021-03-31T09:01:45.280Z","logger":"kafkajs","message":"[Consumer] Starting","groupId":"test-group"}
{"level":"INFO","timestamp":"2021-03-31T09:01:45.312Z","logger":"kafkajs","message":"[ConsumerGroup] Consumer has joined the group","groupId":"test-group","memberId":"my-app-cac1e6c7-9757-43e4-aa1b-3e71a53b738c","leaderId":"my-app-cac1e6c7-9757-43e4-aa1b-3e71a53b738c","isLeader":true,"memberAssignment":{"test-topic":[0]},"groupProtocol":"RoundRobinAssigner","duration":29}
{ partition: 0, offset: '1', value: 'Hello KafkaJS user!' }
{ partition: 0, offset: '2', value: 'Hello KafkaJS user!' }
cannot be resolved to absolute file path because it does not reside in the file system 원인 및 해결
도커 볼륨 권한 설정 문제, chmod not working