ビッグデータ開発-Nginx&Kafka-Nginxはページ収集を行い、Kafkaは対応するトピックを収集します

0.アーキテクチャの概要

ユーザー操作ログなどのオンラインリアルタイムストリームをシミュレートします。データを収集した後、それを処理します。当面は、データ収集を検討Html+Jquery+Nginx+Ngx_kafka_module+Kafkaし、それを実現するために使用します。その中で、Ngx_kafka_moduleは、Nginxとのインターフェースに特に使用されるオープンソースKafkaコンポーネントです

1.要件の説明

1.1ユーザーリクエストログの使用htmljqueryシミュレーション

以下の項目を含みます:

ユーザーID:user_id、アクセス時間:act_time、操作:(アクション、クリック、job_collect、cv_send、cv_uploadを含む)

エンタープライズコードjob_code

1.2Nginxを使用して1.1でリクエストを受け入れる

1.3リクエストを受信したら、ngx_kafka_moduleを使用して、Kafkaのトピックtp_individualにデータを送信します。

1.4消費者を使用して、カフカでトピックを消費し、観察する

2.ビルド手順

2.1 Kafka安装

既製のインストール済みdocker-kafkaイメージを使用しているため、直接起動できます。

2.2Nginxをインストールして開始します

$ cd /usr/local/src
$ git clone [email protected]:edenhill/librdkafka.git
# 进入到librdkafka,然后进行编译
$  cd librdkafka
$  yum install -y gcc gcc-c++ pcre-devel zlib-devel
$  ./configure
$  make && make install

$ yum -y install make zlib-devel gcc-c++ libtool openssl openssl-devel
$ cd /opt/hoult/software
# 1.下载
$ wget http://nginx.org/download/nginx-1.18.0.tar.gz
# 2.解压
$ tar -zxf nginx-1.18.0.tar.gz -C /opt/hoult/servers
# 3. 下载模块源码
$ cd /opt/hoult/software
$ git clone [email protected]:brg-liuwei/ngx_kafka_module.git
# 4. 编译
$ cd /opt/hoult/servers/nginx-1.18.0
$ ./configure --add-module=/opt/hoult/software/ngx_kafka_module/
$ make && make install 
# 5.删除Nginx安装包
$ rm /opt/hoult/software/nginx-1.18.0.tar.gz
# 6.启动nginx
$ cd /opt/hoult/servers/nginx-1.18.0
$ nginx 

3.関連する構成

3.1nginx構成nginx.conf

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    kafka;
    kafka_broker_list linux121:9092;

    server {
        listen       9090;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #------------kafka相关配置开始------------
        location = /kafka/log {
                #跨域相关配置
                add_header 'Access-Control-Allow-Origin' $http_origin;
                add_header 'Access-Control-Allow-Credentials' 'true';
                add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

                kafka_topic tp_individual;
        }

        #error_page  404              /404.html;
    }

}

3.2Kafkaの生産者と消費者を開始する

# 创建topic
kafka-topics.sh --zookeeper linux121:2181/myKafka --create --topic tp_individual --partitions 1 --replication-factor 1
# 创建消费者
kafka-console-consumer.sh --bootstrap-server linux121:9092 --topic tp_individual --from-beginning
# 创建生产者测试
kafka-console-producer.sh --broker-list linux121:9092 --topic tp_individual 

3.3 Html + Jqueryコードを書く

<!DOCTYPE html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1,shrink-to-fit=no">
        <title>index</title>
        <!-- jquery cdn, 可换其他 -->
        <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
    </head>
    <body>
        <input id="click" type="button" value="点击" οnclick="operate('click')" />
        <input id="collect" type="button" value="收藏" οnclick="operate('job_collect')" />
        <input id="send" type="button" value="投简历" οnclick="operate('cv_send')" />
        <input id="upload" type="button" value="上传简历" οnclick="operate('cv_upload')" />
    </body>

    <script>

        function operate(action) {

            var json = {'user_id': 'u_donald', 'act_time': current().toString(), 'action': action, 'job_code': 'donald'};

            $.ajax({
                url:"http://192.168.18.128:9090/kafka/log",
                type:"POST" ,
                crossDomain: true,
                data: JSON.stringify(json),
                // 下面这句话允许跨域的cookie访问
                xhrFields: {
                    withCredentials: true
                },
                success:function (data, status, xhr) {

                    // console.log("操作成功:'" + action)
                },
                error:function (err) {

                    // console.log(err.responseText);
                }
            });
        };

        function current() {
            var d   = new Date(),
                str = '';
            str += d.getFullYear() + '-';
            str += d.getMonth() + 1 + '-';
            str += d.getDate() + ' ';
            str += d.getHours() + ':';
            str += d.getMinutes() + ':';
            str += d.getSeconds();
            return str;
        }
    </script>

</html>

されますa.htmlnginxのディレクトリに置かれ、ブラウザの訪問192.168.18.128:9090

4.デモ

4.1最初にzkクラスター、kafkaクラスターを起動します

4.2次に、トピックの作成、コンシューマーの作成、プロデューサーの作成、トピックのテスト

4.3 nginxを起動してページにアクセスし、クリックして消費者のステータスを確認します

全体のプロセスは次のとおりです。

ファイル
Wu Xie、Xiao San Ye、バックグラウンドの小さな新人、ビッグデータと人工知能。
もっと注意してください
ファイル

おすすめ

転載: blog.csdn.net/hu_lichao/article/details/109972138