初识kafka

原创 2016年05月30日 11:06:52

个人笔记。

Kafka只提供了topic,如果想实现queue的模式,那么需要通过consumergroup的方式。如果所有的consumer都在一个group,那么这个topic的消息只会被这个group里面的一个consumer消费。


如果想实现发布-订阅的模式,则每个consumer设置不同的group即可。

 

消息的分区有序

每个消费者对应一个分区,则每个分区的消费只有一个消费者消费,则可以保证有序,同时又有多个分区,还可以达到负载均衡的目的。

分区数等于消费者数量


分区数小于消费者数,会导致消费者被闲置。


分区数大于消费者数



Kafka持续收集日志(当然也可以使用flume,它支持的source很多)

tail -F /tmp/test.txt |./kafka-console-producer.sh --broker-list localhost:9092 --topic connect-test

用tail –F,这样当log新建的时候依然可用,然后加上pipeline,发送到指定的topic

简单整合kafka和storm

<storm.version>1.0.1</storm.version>
<kafka.version>0.10.0.0</kafka.version>
<dependency>
			<groupId>org.apache.storm</groupId>
			<artifactId>storm-core</artifactId>
			<version>${storm.version}</version>
			<!-- <scope>provided</scope> -->
		</dependency>
		<dependency>
			<groupId>org.apache.storm</groupId>
			<artifactId>storm-kafka</artifactId>
			<version>${storm.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.kafka</groupId>
			<artifactId>kafka-clients</artifactId>
			<version>${kafka.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.kafka</groupId>
			<artifactId>kafka_2.11</artifactId>
			<version>${kafka.version}</version>
		</dependency>

Topology

TopologyBuilder builder = new TopologyBuilder();
ZkHosts hosts = new ZkHosts("127.0.0.1:2181");
SpoutConfig sc = new SpoutConfig(hosts, "connect-test", "/kafkaSpoutOffset", "StormStarter-1");
sc.scheme = new StringMultiSchemeWithTopic();
sc.zkServers = Arrays.asList("127.0.0.1");
sc.zkPort = 2181;
//最开始并没有设置上面的2个属性,导致每次重启,kafkaSpout都会从最开始来消费消息,原来需要配置额外再陪一下zk来存储offset, 而SpoutConfig的第三个参数也是对应的offset的path,之前一直以为的kafka broker的zk path来着。记录一下。

builder.setSpout("logSender", new KafkaSpout(sc), 1);
builder.setBolt("logSpliter", new SeperateLogBolt(), 1).shuffleGrouping("logSender");
//SeperateLogBolt对log过滤,拿到log的message。
builder.setBolt("logAnasysis", new AnalyseLogBolt(), 1).shuffleGrouping("logSpliter");
//AnalyseLogBolt就是对最终的log message进行分析并将结果写入存储。
Config conf = new Config();
conf.setDebug(true);

if (args != null && args.length > 0) {
	conf.setNumWorkers(3);
	StormSubmitter.submitTopologyWithProgressBar(args[0], conf, builder.createTopology());
} else {
	conf.setMaxTaskParallelism(3);
	LocalCluster cluster = new LocalCluster();
	cluster.submitTopology("string-demo", conf, builder.createTopology());
	TimeUnit.MINUTES.sleep(30L);
	cluster.shutdown();
}






相关文章推荐

kafka 的 zookeeper 初识

初识kafka的zookeeper           最近项目中,使用redis进行消息的分发与订阅。这种模式就是一种多播的方式,但是随着消息的不断增加,消费端来不及处理所有的数据。在没有持久化的功...

初识Kafka(一)

初识Kafka(一) 一、Kafka 的使用背景 1、在我们大量的使用分布式数据库、分布式计算集群的时候,是否会遇到这样的一些问题呢? # 我想分析用户行为,以便我能设计出更好的广告位 # ...

初识Apache Kafka+JAVA程序实例

本文是从英文的官网摘了翻译的,用作自己的整理和记录。水平有限,欢迎指正。版本是: kafka_2.10-0.10.0.0   一、基础概念 主题:Kafka maintains feeds of m...

初识Kafka:构架、生产消费模型以及其他相关概念

公司的事件总线采用的是Kafka分布式消息队列来完成的,近来项目需要接入到事件总线中,故开启了kafka的学习之旅(之前一直在听说kafka这玩意儿,但是学习计划中还没有将它安排进去,借着这个机会学习...

(一)Kafka中文教程-初识kafka

之前我介绍过RabbitMQ,RabbitMQ作为企业级的消息队列其实未必能满足所有的需求,RabbitMQ在持久化、可靠性、消息确认机制、任务分发等方面都非常优秀。但也因为这些原因导致RabbitM...

初识Kafka----个人理解,希望对喜欢kafka的朋友有帮助

1、什么是kafka? kafka是一个发布订阅系统,主要用作缓存 2、核心概念 首先kafka是一个集群,有很多个节点组成。 Broker['brəʊkə]:节点名称每一个节点称作broke...

初识MyBatis

  • 2017年06月30日 15:44
  • 572KB
  • 下载

初识java笔记

  • 2015年08月09日 12:58
  • 715KB
  • 下载

命中注定与你相遇之初识UML

大家听到UML后感到很陌生,UML是一种可视化的面向对象的建模语言,他的中文名字叫统一建模语言,外国名字叫Unified  Modeling Language,那么他是做什么用的呢?...

Robotium环境搭建和初识

  • 2015年10月26日 10:31
  • 600KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:初识kafka
举报原因:
原因补充:

(最多只允许输入30个字)