一 前言

Bottled Water是Confluent公司开发的一款可以将postgresql数据库转换为kafka events的工具。主要用于监视PG的数据增删改的变化,将变化的数据实时推送到kafka消息队列,其他关心数据变化的平台只要监听kafka的消息,就能得到改变的数据。具体参考德哥的博客《实时数据交换平台 - BottledWater-pg with confluent》,本文具体的安装步骤也参考了《Bottled Water: 实时集成postgresql与kafka》。

二 安装准备

安装完成PostgreSQL,参考《Centos7安装PostgreSQL9.6》;
安装完成Kafka,参考《Kafka部署》;
此外还依赖avro-c,Jansson,libcurl,librdkafka

三 安装步骤bottledwater-pg

3.1 安装libjansson

wget http://www.digip.org/jansson/releases/jansson-2.9.tar.bz2
tar -jxvf jansson-2.9.tar.bz2
cd jansson-2.9
./configure --prefix=/home/free/jansson
make
make installexport PKG_CONFIG_PATH=/home/free/jansson/lib/pkgconfig:$PKG_CONFIG_PATHpkg-config --cflags --libs jansson
-I/home/free/jansson/include  -L/home/free/jansson/lib -ljansson

3.1 安装avro

wget http://mirrors.hust.edu.cn/apache/avro/avro-1.8.1/avro-src-1.8.1.tar.gztar -zxvf avro-src-1.8.1.tar.gzcd avro-src-1.8.1/lang/c
mkdir build
cd buildcmake .. -DCMAKE_INSTALL_PREFIX=/home/free/avro -DCMAKE_BUILD_TYPE=Release -DTHREADSAFE=true
make
make test
make install
export PKG_CONFIG_PATH=/home/free/avro/lib/pkgconfig:$PKG_CONFIG_PATH

在make这一步骤报错如下:

opt/avro-src-1.8.1/lang/c/src/schema.c:31:21: fatal error: jansson.h: No such file or directory#include "jansson.h"^
compilation terminated.
make[2]: *** [src/CMakeFiles/avro-shared.dir/schema.o] Error 1
make[1]: *** [src/CMakeFiles/avro-shared.dir/all] Error 2
make: *** [all] Error 2

这一步骤应该是编译缺少了头文件,先加上去,然后重新编译。

export C_INCLUDE_PATH=/home/free/jansson/include:$C_INCLUDE_PATH

3.3 安装libcurl

wget https://curl.haxx.se/download/curl-7.54.0.tar.gz
tar -zxvf curl-7.54.0.tar.gz
cd curl-7.54.0./configure --prefix=/home/free/curl
make
make install
export PKG_CONFIG_PATH=/home/free/curl/lib/pkgconfig:$PKG_CONFIG_PATH

3.4 安装librdkafka

git clone https://github.com/edenhill/librdkafka
cd librdkafka
./configure --prefix=/home/free/librdkafka
#假如报错如下:
#[root@bogon librdkafka]# ./configure --prefix=/home/freegis/librdkafka
#-bash: ./configure: Permission denied
#赋予执行权限
#[root@bogon librdkafka]# chmod 777 configuremake -j 32
make installexport PKG_CONFIG_PATH=/home/free/librdkafka/lib/pkgconfig:$PKG_CONFIG_PATH

在make的时候,64位的linux会报错如下:

/bin/ld:librdkafka.lds:1: syntax errer in VERSION script

只需要在Makefile.config里面的WITH_LDS=y这一行注释掉重新make就可以了。

3.5 安装bottledwater-pg

在环境变量中新增如下依赖:

vi /etc/profile
#编辑内容如下
export CURLHOME=/home/freegis/curl
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$GCCHOME/bin:$CURLHOME/bin
# wq!保存
source /etc/profile

下载安装文件并编译部署:

git clone https://github.com/confluentinc/bottledwater-pgcd bottledwater-pg
#启用postgres的环境变量
source /home/postgres/.bashrc
make
make install

make可能报错如下:

ake[1]: Entering directory `/opt/bottledwater-pg-master/kafka'
gcc bottledwater.c -c -std=c99 -D_POSIX_C_SOURCE=200809L -I../client -I../ext -I/home/postgres/include -I/home/postgres/include/server  -I/home/freegis/avro/include   -DAVRO_1_8    -Wall -Wmissing-prototypes -Wpointer-arith -Wendif-labels -Wmissing-format-attribute -Wformat-security -o bottledwater.o
In file included from table_mapper.h:4:0,from json.h:5,from bottledwater.c:2:
registry.h:4:32: fatal error: librdkafka/rdkafka.h: No such file or directory#include <librdkafka/rdkafka.h>^
compilation terminated.

这种情况仍然是头文件找不到,为了麻烦,把用到的头文件都指定。

export C_INCLUDE_PATH=/home/free/jansson/include:$C_INCLUDE_PATH
export C_INCLUDE_PATH=/home/free/avro/include:$C_INCLUDE_PATH
export C_INCLUDE_PATH=/home/free/librdkafka/include:$C_INCLUDE_PATH
export C_INCLUDE_PATH=/home/free/curl/include:$C_INCLUDE_PATH

继续编译后报错:

/usr/bin/ld: cannot find -lrdkafka

详细如下:

缺失依赖.png

建立依赖软连接:

ln -s /home/free/librdkafka/lib/librdkafka.so /home/postgres/lib/librdkafka.so

检查安装情况

su - postgres
psql
create extension bottledwater;

如果创建扩展报错如下:

mcsas=# create extension bottledwater;
ERROR:  could not load library "/home/postgres/lib/bottledwater.so": libavro.so.23.0.0: cannot open shared object file: No such file or directory

查看下bottledwater.so的依赖:

[postgres@bogon lib]$ ldd bottledwater.so linux-vdso.so.1 =>  (0x00007fffc41fe000)libavro.so.23.0.0 => /home/freegis/avro/lib/libavro.so.23.0.0 (0x00007f1f26769000)libc.so.6 => /lib64/libc.so.6 (0x00007f1f263a8000)libjansson.so.4 => /lib64/libjansson.so.4 (0x00007f1f2619c000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1f25f7f000)/lib64/ld-linux-x86-64.so.2 (0x00007f1f26bba000)

发现所有的依赖都正确。
后经大神提示,重启数据库,然后执行扩展。

pg_ctl restart
psql
\c mcsas
create extension bottledwater;
CREATE EXTENSION

BottledWater-PG安装部署相关推荐

  1. pg安装部署linux_简简单单基于docker部署微服务网关

    ❝ 本文整理于今年3月,收录在个人开源仓库JavaScriptCollection中,其中很多概念不乏借鉴.摘抄自官网,便于复习相关概念,有兴趣的可以直接去仓库Clone文档学习.参考! ❞ 基本概念 ...

  2. pg安装部署linux_Linux下postgresql数据库部署与配置

    1.检查postgresql是否已经安装:rpm -qa | grep postgres 2.检查PostgreSQL 安装位置:rpm -qal | grep postgres 3.卸载Postgr ...

  3. CentOS 7.5安装部署Jewel版本Ceph集群

    参考文档 https://www.linuxidc.com/Linux/2017-09/146760.htm https://www.cnblogs.com/luohaixian/p/8087591. ...

  4. K3s - 安装部署

    文章目录 1. K3s简介 2. K3s架构说明 3. K3s安装部署 3.1 脚本快速在线安装 3.2 安装说明 3.3 HA模式部署(外部数据库) 3.4 HA模式部署(内置数据库) 3.5 离线 ...

  5. Postgresql 12.2 + PostGIS 3.0.1 安装部署手册

    Postgresql 12.2 + PostGIS 3.0.1 安装部署手册 文章目录 Postgresql 12.2 + PostGIS 3.0.1 安装部署手册 环境说明 注意事项 Postgre ...

  6. 安装部署postgresql-15 高可用(pgpool)

    安装部署postgresql-15 高可用(pgpool) 文章目录 前言 部署环境: 下载地址: 安装pg15 安装pgpool 配置pgpass文件 创建pgpool_node_id Pgpool ...

  7. Linux下使用docker安装部署Sonar Qube

    文章目录 Linux下使用docker安装部署Sonar Qube 一.环境准备 二.部署步骤 三.使用 四.结束 Linux下使用docker安装部署Sonar Qube 一.环境准备 本文默认会使 ...

  8. CentOS8离线安装部署ceph集群

    文章目录 1.概念简介 1.1 存储类型 1.1.1 DAS设备 1.1.2 NAS设备:文件服务 1.1.3 SAN设备:块服务 1.2 Ceph 架构简介 2.集群节点规划 3.准备工作 4.使用 ...

  9. Prometheus运维二 安装部署Prometheus及使用PromQL查询监控数据

    1,安装部署. 1,环境准备. 软件包下载地址:https://prometheus.io/download/ 地址 规划/软件包 192.168.0.10 Prometheus Server 192 ...

  10. 安装 部署 postgresql数据库 搭建timescaledb数据库 (时序库)

    安装 部署 postgresql数据库 搭建timescaledb数据库 (时序库) timescaledb 搭建 文章目录 安装 部署 postgresql数据库 搭建timescaledb数据库 ...

最新文章

  1. LeetCode实战:最接近的三数之和
  2. R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景、受试者口服茶碱的之后观察茶碱的浓度变化的山脊图
  3. 【C/C++学院】0831-类与对象的异常/面试100题1-100
  4. MATLAB知识点1
  5. Elasticsearch 2.0以上版本根据条件批量删除Java如何实现
  6. 二十四、深入Python多线程和多进程
  7. ElasticSearch创建、修改、获取、删除、索引Indice mapping和Index Template案例
  8. Python3系列__01Python安装
  9. java编写一个个人通信录程序
  10. 对编辑框进行赋值和取值
  11. Linux 下安装 Elasticsearch5.6.x 详细步骤以及踩坑解决方案
  12. 使用VAE(变分自动编码器),来预测用户流失.
  13. EasyCVR平台如何实现超低延时的安防视频监控直播?
  14. Java面试自我介绍篇
  15. Lotus Miner和分布式设置
  16. 关于Java字符串中拼接换行符
  17. Java程序设计基础【4】
  18. VBA破解Excel表格保护密码
  19. 远程桌面连接管理 工具使用说明
  20. 微信商城商家该如何运营

热门文章

  1. java 实现短信验证码
  2. window.open,打开窗口与打开新标签页,刷新父窗口数据
  3. L13过拟合欠拟合及其解决方案
  4. linux memery dump
  5. 网页打开速度慢的原因及N种解决方法
  6. 第三章 枚举(炸弹人、火柴棍等式、全排列)
  7. Win11怎么关闭休眠?Win11禁止休眠设置方法
  8. 阿里巴巴矢量图库开源http://www.iconfont.cn/collections/detail?cid=29
  9. 个人力扣刷题笔记 LCP 03. 机器人大冒险
  10. Win7 配置 Git 客户端 图文详解