关闭

初识kafka

179人阅读 评论(0) 收藏 举报
分类:

个人笔记。

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();
}






0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:45392次
    • 积分:752
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:59篇
    • 译文:3篇
    • 评论:0条
    文章分类