topic

震惊了!原来这才是kafka!

北城以北 提交于 2019-12-11 06:49:57
简介 kafka是一个分布式消息队列。具有高性能、持久化、多副本备份、横向扩展能力。生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。一般在架构设计中起到解耦、削峰、异步处理的作用。 kafka对外使用topic的概念,生产者往topic里写消息,消费者从读消息。为了做到水平扩展,一个topic实际是由多个partition组成的,遇到瓶颈时,可以通过增加partition的数量来进行横向扩容。单个parition内是保证消息有序。 每新写一条消息,kafka就是在对应的文件append写,所以性能非常高。 kafka的总体数据流是这样的: kafka data flow 大概用法就是,Producers往Brokers里面的指定Topic中写消息,Consumers从Brokers里面拉去指定Topic的消息,然后进行业务处理。 图中有两个topic,topic 0有两个partition,topic 1有一个partition,三副本备份。可以看到consumer gourp 1中的consumer 2没有分到partition处理,这是有可能出现的,下面会讲到。 关于broker、topics、partitions的一些元信息用zk来存,监控和路由啥的也都会用到zk。 生产 基本流程是这样的: kafka sdk product flow.png 创建一条记录

RocketMQ NameServer深入剖析

风格不统一 提交于 2019-12-10 22:37:04
本文将深入剖析rocketmq为什么选择自己开发NameServer,而不是选择类似于ZK这样的开源组件。同时对rocketmq的路由注册、路由发现、路由剔除进行剖析。并通过结合核心源码,对笔者的观点进行验证。同时对不同类型消息的重试机制,以及客户端选择nameserver的策略进行深入讲解。 文章第一部分是name server在rocketmq整体架构中的作用,熟悉的同学可以直接跳过。 1 NameServer的作用 Name Server 是专为 RocketMQ 设计的轻量级名称服务,具有简单、可集群横吐扩展、无状态,节点之间互不通信等特点。整个Rocketmq集群的工作原理如下图所示: 可以看到,Broker集群、Producer集群、Consumer集群都需要与NameServer集群进行通信: Broker集群 Broker用于接收生产者发送消息,或者消费者消费消息的请求。一个Broker集群由多组Master/Slave组成,Master可写可读,Slave只可以读,Master将写入的数据同步给Slave。每个Broker节点,在启动时,都会遍历NameServer列表,与每个NameServer建立长连接,注册自己的信息,之后定时上报。 Producer集群 消息的生产者,通过NameServer集群获得Topic的路由信息,包括Topic下面有哪些Queue

kafka 相关命令 偏移重置

 ̄綄美尐妖づ 提交于 2019-12-10 15:08:12
kafka官方文档 https://kafka.apache.org/documentation.html#quickstart kafka 安装文档 https://www.jianshu.com/p/c74e0ec577b0 相关命令: kafka 启动:kafka官方文档 https://kafka.apache.org/documentation.html#quickstart kafka 安装文档 https://www.jianshu.com/p/c74e0ec577b0 主题相关命令: kafka 启动: kafka-server-start.sh ./config/server.properties 1>/dev/null 2>&1 & kafka 停止: kill pid 创建topic replication 取决于可用分区数 kafka-topics.sh --create --zookeeper 10.202.13.196:2181 --replication-factor 1 --partitions 1 --topic cjw-test 删除topic kafka-topics.sh --delete --zookeeper 10.202.13.196:2181 --topic cjw-test 获取创建分区相关参数 kafka-topics.sh -

kafka(十七):Kafka监控软件KafkaOffsetMonitor和kafka-manager操作实例

与世无争的帅哥 提交于 2019-12-10 09:50:48
一、实现功能 本文描述两种监控kafka执行软件KafkaOffsetMonitor和kafka-manager的实现,参考很多大佬的实现方案,和本地有些出入,所以,特地重新重写了一次。参考解决方案,在文末给出。 二、本地环境 1.Centos6 2.Kafka0.8.2.1 3.Kafka准备工作 (1)kafka启动 启动zk和kafka bin/zkServer.sh start bin/kafka-server-start.sh config/server.properties (2)创建对应topic kafka-topics.sh --create --zookeeper hadoop01:2181/kafka08 --replication-factor 1 --partitions 1 --topic hello_topic 查看 [root@hadoop01 kafka_2.11-0.8.2.1]# bin/kafka-topics.sh --list --zookeeper hadoop01:2181/kafka08 __consumer_offsets hello_topic subscribe_topic1 (3)消费者和生产者 生产者 bin/kafka-console-producer.sh --broker-list hadoop01:9092 -

xfj-mall_kafka相关

二次信任 提交于 2019-12-10 05:13:28
基础架构 kafka Brokers(代理人)说明: 可以把这个看成是kafka的服务器,从宏观逻辑上可以看成是生产者把消息push到topic的partition上,并通知brokers,之后消费者订阅(pull)消息,触发broker,broker记录消费者(要消费的主题等相关信息)。 Consumer Group 说明: 可以把整个Consumer Group看做是一个Consumer集群;在kafka通过下面消费命令去启动一个消费者会默认随机分配到一个group中,可通过下方的命令查看生成group;另外在kafka的消费中有个规则: 同一个group中只能有一个consumer消费partition,但同一个partition可以被不同group中的consumer消费;所以在一般场景下需要指定你需要消费的group(当然需要根据具体场景来定) 过程 生产者定期向主题发送消息。 Kafka代理存储为该特定主题配置的分区中的所有消息。 它确保消息在分区之间平等共享。 如果生产者发送两个消息并且有两个分区,Kafka将在第一分区中存储一个消息,在第二分区中存储第二消息。 消费者订阅特定主题。 一旦消费者订阅主题,Kafka将向消费者提供主题的当前偏移,并且还将偏移保存在Zookeeper系综中。 消费者将定期请求Kafka(如100 Ms)新消息。

Mosquitto感知客户端上下线的方法

房东的猫 提交于 2019-12-10 04:20:51
国内最活跃的Mosquitto沟通社区,关于MQTT、Mosquitto、IM、推送系统、物联网、高并发处理等技术。 需要让设备上mqtt客户端配合来完成。 1、怎么知道设备下线? 异常断线(Mosquitto没有收到MQTT 的DISCONNECT报文)时,使用遗嘱机制,mqtt客户端在建立mqtt连接的时候,设置遗嘱(向什么topic发送什么数据):当前这个tcp连接断开的时候,Mosquitto自动按照遗嘱设置发送消息,这时利用这个机制,topic应用设定好,例如:iot/status/onoffline;所设置的遗嘱消息内容就是一个JSON字符串,里面包含当前连接的ID等信息,上线状态,例如: {"id":11232232432,//这个id就是当前设备的ID "status":"offline"//表示这是一个设备下线的通知; } 这样这个连接断开的时候(无论正常还是异常)谁订阅了这个topic就能收到这个消息. 正常断线(mqtt客户端主动发送了DISCONNECT报文)时,客户端要在发送DISCONNECT报文之前(及调用paho包的disconnect接口之前)主动向上下线topic发布一条设备下线的消息。 2、怎么知道设备上线? mqtt客户端在建立mqtt连接之后,无条件向某个topic(例如:iot/status/onoffline)发送一个消息

Kafka常用命令

↘锁芯ラ 提交于 2019-12-10 02:53:51
1.topic相关 1.1 查看kafka集群的所有topic ./bin/kafka-topics.sh --list --zookeeper localhost:2181 1.2 创建名称为topic_test的topic,patitions为1个,副本为1个 .bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --patitions 1 --topic topic_test 1.3 为topic_test添加patition为10 .bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic topic_test --partitions 10 1.4 删除名称为topic_test的topic(只删除zookeeper内的元素,消失文件须手动删除) .bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic topic_test 1.5 查看topic为topic_test的详细信息 .bin/kafka-topics.sh --zookeeper localhost:2181 -describe -topic topic_test

CDH中添加的Kafka消息不能同步[爬坑过程+总结解决]

烈酒焚心 提交于 2019-12-09 21:00:02
首先通过这篇博客我们可以在CDH中安装好Kafka: CDH添加Kafka服务 上面安装好Kafka已经可以创建Topic,并且Topic信息所搭建的集群均可以同步。后面因为还需要测试一下消息传输,发现开启了生产者与消费者后,在生产者发送消息到Topic时报超时,并且消费者也一直没有接受到数据。然后后面一直在解决这个问题到后面一直报异常输出 WARN clients.NetworkClient ,还重新装kafka了三次。中间因为数据删除不干净连kafka都启动不了了,弄来弄去了三四天,今天终于解决了。总结一下,若也遇到这样的问题后来者提供一些解决思路。 首先先看一下kafka的 发布订阅系统的代理结构: 一、遇到问题 首先打开生产者: kafka-console-producer --broker-list cluster2-1:2181,cluster2-2:2181,cluster2-3:2181,cluster2-4:2181 --topic test 现在再看这个指令挺可笑的。。。 kafka的 端口号应该是9092 ,我这里跟zookeeper的端口号没理解一直弄混了,后面有提到。不过还是要把之前的问题还原一下,有端口问题的同学可以尽快改过来再试试可以成功了吗。 打开消费者: kafka-console-consumer --bootstrap-server

从零开始的 Python Scrapy爬虫速成指南

ε祈祈猫儿з 提交于 2019-12-08 21:29:36
序 本文主要内容:以最短的时间写一个最简单的爬虫,可以抓取论坛的帖子标题和帖子内容。 本文受众:没写过爬虫的萌新。 入门 0.准备工作 需要准备的东西: Python、scrapy、一个IDE或者随便什么文本编辑工具。 1.技术部已经研究决定了,你来写爬虫。 随便建一个工作目录,然后用命令行建立一个工程,工程名为miao,可以替换为你喜欢的名字,创建爬虫工程的命令为: scrapy startproject miao 其中的miao为要创建的爬虫项目的名称。 随后你会得到如下的一个由scrapy创建的目录结构 在spiders文件夹中创建一个python文件,比如miao.py,来作为爬虫的脚本。 内容如下: import scrapy class NgaSpider (scrapy.Spider) : #这里的name作用是为了运行该爬虫项目,运行时使用命令scrapy crawl NgaSpider而不是scrapy crawl miao(爬虫项目的名称) name = "NgaSpider" host = "http://bbs.ngacn.cc/" # start_urls是我们准备爬的初始页 start_urls = [ "http://bbs.ngacn.cc/thread.php?fid=406" , ] # 这个是解析函数,如果不特别指明的话

rocketmq如何新增topic

ε祈祈猫儿з 提交于 2019-12-08 20:28:28
新增topic是需要客户端直接通知broker完成的: 通过createAndUpdateTopicConfig方法 发送给broker以后,在AdminBrokerProcessor里面负责处理这个类型消息: private synchronized RemotingCommand updateAndCreateTopic(ChannelHandlerContext ctx, RemotingCommand request) throws RemotingCommandException { final RemotingCommand response = RemotingCommand.createResponseCommand(null); final CreateTopicRequestHeader requestHeader = (CreateTopicRequestHeader) request.decodeCommandCustomHeader(CreateTopicRequestHeader.class); log.info("updateAndCreateTopic called by {}", RemotingHelper.parseChannelRemoteAddr(ctx.channel())); if (requestHeader.getTopic()