Linkedin Databus Test2 - Databus Example - Relay
LinkedIn Databus 테스트 관련 정리입니다. 3개 글로 되어 있습니다.
Databus 에서 제공하는 example 을 실행해 보자.
Databus Relay 실행
정상적으로 빌드가 되었으면 databus-master/build/databus2-example-relay-pkg/distributions
디렉토리 안에
databus2-example-relay-pkg-2.0.0.tar.gz
파일이 생성되었을 것이다.
압축을 풀어 두자.
$ tar -zxvf databus2-example-relay-pkg.tar.gz
테스트 데이터 생성
기본적을 제공되는 데이터 생성 스크립트 ./bin/create_person.sh
를 실행하면 된다.
(mysql 포트변경 및 root 패스워드 변경이 필요할 것이다.)
안되면, copy & paste 로 직접 쿼리 하자.
cd bin && ./create_person.sh
#!/bin/bash
script_dir=`dirname $0`
#Setup this to point appropriately to MySQL instance
MYSQL='/usr/local/bin/mysql --protocol=tcp --port=3066'
SQL_DIR=../sql
$MYSQL -uroot -e 'CREATE DATABASE IF NOT EXISTS or_test;';
$MYSQL -uroot -e "CREATE USER 'or_test'@'localhost' IDENTIFIED BY 'or_test';";
$MYSQL -uroot -e "GRANT ALL ON or_test.* TO 'or_test'@'localhost';"
$MYSQL -uroot -e "GRANT ALL ON *.* TO 'or_test'@'localhost';"
$MYSQL -uroot -e "GRANT ALL ON *.* TO 'or_test'@'127.0.0.1';"
${MYSQL} -uor_test -por_test -Dor_test < ${SQL_DIR}/create_person.sql
${MYSQL} -uor_test -por_test -Dor_test < ${SQL_DIR}/insert_person_test_data_1.sql
${MYSQL} -uroot -e 'RESET MASTER;'
9건의 데이터가 생성되었을 것이다.
sources 파일 설정
마찬가지로 기본 제공되는 소스 설정 파일 conf/sources-or-person.json
에 자신의 포트와, mysql server-id 가 맞도록 수정해아한다.
{
"name" : "person",
"id" : 1,
"uri" : "mysql://or_test%2For_test@localhost:3306/3306/mysql-bin",
"slowSourceQueryThreshold" : 2000,
"sources" :
[
{
"id" : 40,
"name" : "com.linkedin.events.example.or_test.Person",
"uri": "or_test.person",
"partitionFunction" : "constant:1"
}
]
}
Relay 실행
$ ./bin/start-example-relay.sh or_person -Y ./conf/sources-or-person.json
정상적으로 실행되었으면, pid 가 있을 것이다.
databus-master/build/databus2-example-relay-pkg/distributions/logs
아래 로그를 확인하면 더 자세한 내용을 볼 수 있다.
Relay 테스트
소스확인
$ curl -s http://localhost:11115/sources
[{"name":"com.linkedin.events.example.or_test.Person","id":40}]
데이터 변경
update person set first_name='John' where id=1;
변경 데이터 건수 확인
$ curl -s http://localhost:11115/containerStats/inbound/events/total?pretty | grep numDataEvents
"numDataEvents" : 1,
TroubleShooting
Databus Example 을 돌리기 위한 Relay 와 Client 의 source name 이 맞지 않는다. (정확히는 oracle 용 Client 만 제공되는 것 같아 보인다.)
그러한 이유로,
다음과 같은 에러를 발생시킨다.
DatabusException: Mismatch in db schema vs avro schema
정상적인 실행을 위해 Client 를 수정할 경우 ReBuild 가 필요하므로 (소스에 하드코딩되어 있음),
Relay 설정을 변경하여 동작하도록 했다.
- ./conf/sources-or-person.json 파일안의 name 값 수정
“name” : “com.linkedin.events.example.or_test.Person”, 값을 “name” : “com.linkedin.events.example.person.Person” 으로 변경한다.
client 프로그램에 저 이름이 하드코딩되어 있다.
{
"name" : "person",
"id" : 1,
"uri" : "mysql://or_test%2For_test@localhost:3306/3306/mysql-bin",
"slowSourceQueryThreshold" : 2000,
"sources" :
[
{
"id" : 40,
"name" : "com.linkedin.events.example.person.Person",
"uri": "or_test.person",
"partitionFunction" : "constant:1"
}
]
}
- ./schemas_registry 안의 값 수정
기본적으로 다음과 같은 파일 두건이 저장되어 있다.
- com.linkedin.events.example.person.Person.1.avsc
- com.linkedin.events.example.or_test.Person.1.avsc
com.linkedin.events.example.person.Person.1.avsc
파일을 삭제한다.
com.linkedin.events.example.or_test.Person.1.avsc
파일안의 namespace 값을 com.linkedin.events.example.person.Person
로 수정한다.
com.linkedin.events.example.or_test.Person.1.avsc
파일의 이름을 com.linkedin.events.example.person.Person.1.avsc
로 변경한다.
index.schemas_registry
파일을 열고, com.linkedin.events.example.or_test.Person.1.avsc
내용을 삭제한다.
그리고 실행하면 정상적으로, relay 를 구성한다.
Relay RestAPI
지금까지 발견한 RestAPI 정리함.
- curl http://localhost:11115/containerStats/inbound/events/total?pretty
- curl http://localhost:11115/sources
- curl http://localhost:11115/relayStats/outbound/http/clients
코드를 보면 뭐.. 더 있겠지…
- [정리] 정보이론: 정보량 (Information), 엔트로피 ( Entropy ), 쿨백 라이블러 발산 (KL-Divergence), 크로스 엔트로피 ( Cross - Entropy ), maximum likelihood
- [발번역] Bag of words (BoW) - Natural Language processing
- Installing Anaconda and Jupyter notebook
- 다시 보는 Java : FileChannel transferTo()
- 다시 보는 Java : NIO Channel
- 다시 보는 Java : Socket-Direct-Protocol
- 다시 보는 Java
- Streamsets DataCollector Source Build
- Apache Helix Core Concepts
- Introduce Flipkart Aesop