Redis + Logstash 缓存数据导入 Elasticsearch 实战

Redis + Logstash 缓存数据导入 Elasticsearch 实战

注意: data_type 类型是 channel时,Redis 数据 必须是 订阅消息 【channel类型 不要指定 db】;数据导入 成功 ,登入kibana 创建指定索引模式 【索引:crawl-%{+YYYY.MM.dd}】,再discover 中查看相关数据

应用场景:将 redis 队列存放的数据导入 elasticsearch,进行全文搜索

一、编写 redis-es.conf ,文件可以存放在: /etc/logstash/conf.d/redis-es.conf 

input {
    redis {
        data_type => "list"              # 使用 redis 的list数据类型
        host => ["127.0.0.1"]
        db => "0"
        port => "6379"                  
        key => "crawl"                   # redis的key
        codec => "json"                  # 数据类型为json,在list中存放的值需要为json
    }
}
 
output {
    elasticsearch {
        hosts => ["127.0.0.1:9200"]
        index => "crawl-%{+YYYY.MM.dd}"       # 指定存放的索引名称
    }
    stdout {  # 导入过程中以json形式显式的输出导入的内容
         codec => json_lines  
     }
}
 
 
# 配置完成后,logstash 会自动监听 redis 中数据库为 0 的 并且为 list 类型的 key 为 crawl 的值,如果新增数据,将会弹出数据并经 logstash 导入 es

二、启动 logstash

logstash -f /etc/logstash/conf.d/redis-es.conf

若没有报错,则可以到 redis 中插入数据

redis-cli
 
127.0.0.1:6379> LPUSH crawl '{"name":"baobao", "age":12}'
(integer) 1
 
127.0.0.1:6379> LPUSH crawl '{"name":"maomao", "age":13}'     # 注意这种json格式才是对的,否则logstash会报错:JSON parse error, original data now in message field
(integer) 1
 
 
# 可见push一条,logstash会实时pop一条,然后推送到 elasticsearch

三、查看 Elasticsearch 是否存在相关数据:

curl -H "Content-Type:application/json" -d "{\"from\":0, \"size\":100}" -X POST http://localhost:9200/crawl-2020.03.20/_search?pretty

在末尾能看到 redis 对应的 json 数据写入到 ES 中

...
{
        "_index" : "crawl-2020.03.20",
        "_type" : "_doc",
        "_id" : "h1L79nABFQPU3aGbYsJI",
        "_score" : 1.0,
        "_source" : {
          "@version" : "1",
          "name" : "baobao",
          "age" : 12,
          "@timestamp" : "2020-03-20T08:07:14.655Z"
        }
      }
    ]
  }
}

注意: data_type 类型是 channel时,Redis 数据 必须是 订阅消息

Pub/Sub(消息发布订阅)

 发布订阅类似于消息管道,用来进行系统之间消息解耦,我们可以设定对某个key值(channel频道)进行消息发布及消息订阅,当一个channel上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这就类似于rabbitmq、activemq、rocketmq、kafka等。

6.1 subscribe
 订阅指定频道的信息
127.0.0.1:6379> subscribe channel_task
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel_task"
3) (integer) 1
6.2 unsubscribe
 取消订阅指定的频道。若不指定则取消订阅所有的频道。

127.0.0.1:6379> unsubscribe channel_task
1) "unsubscribe"
2) "channel_task"
3) (integer) 0
6.3 publish
 将信息message发送到指定的频道channel。返回收到消息的客户端数量。

127.0.0.1:6379> publish channel_task add_user_score
(integer) 1   (此时有一个订阅该频道的客户端收到信息)

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猪@笨笨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值