初识kafka

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

个人笔记。

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


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

 

消息的分区有序

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

分区数等于消费者数量


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


分区数大于消费者数



kafka说明
整合spring一起使用时,配置的并发数即对应的consumer, 即消费线程,不是部署的机器
spring:
  kafka:
    listener:
        concurrency: 10



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学习笔记:初识Kafka

前言Apache Kafka is a distributed streaming platform and is used for building real-time data pipelines...
  • qq_31823267
  • qq_31823267
  • 2017年08月26日 14:21
  • 81

初识人工智能

人工智能,之所以冠以“”人工“,最主要是因为其模仿人类的思维过程所产生的。而“”智能“”,怎样才算智能呢?前一阵子比较火的智能家居,最主要的形式是通过各种手机APP 或者终端远程控制各种家电开关,这种...
  • oangeli
  • oangeli
  • 2017年01月18日 23:35
  • 212

Kafka 初识

Kafka是什么? Kafka是一个高吞吐量的、分布式的消息发布-订阅系统,官网解释为一个分布式的、可分区的、可复制的的提交日志服务。具有如下特性: 1、通过O(1)的磁盘数据结构提供消息的持久化,这...
  • qiruiduni
  • qiruiduni
  • 2016年02月03日 11:57
  • 358

kafka初识

简介Kafka 是 linkedin 用于日志处理的分布式消息队列,同时支持离 线和在线日志处理。kafka 对消息保存时根据 Topic 进行归类,发送 消息者成为 Producer,消息接受者成为...
  • u012373815
  • u012373815
  • 2016年08月25日 22:58
  • 372

初识Kafka

(一)Kafka设计背景及原因 Kafka最初被LinkedIn设计来处理活动流数据(activity stream data)和系统处理数据(operaitonal data)。活动流数据是指像p...
  • shanelisy
  • shanelisy
  • 2016年01月09日 15:53
  • 756

初识kafka

什么是Apache kafka?      系统应用用户的活动数据、请求数据、交互数据、运行维护数据如性能监测、服务器CPU指标这些大量的数据都在无时无刻的产生,Kafka便是有着一套成熟的消息处理...
  • linxi1209163com
  • linxi1209163com
  • 2016年03月31日 20:30
  • 607

Kafka初识

问题一 写出增加Kafka的Partition命令 bin/kafka-add-partitions.sh --topic test --partition 2 --zookeeper 192...
  • u011239443
  • u011239443
  • 2016年07月24日 18:10
  • 421

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

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

JAVA学习第一课(初识JAVA)

PS:退ACM集训队了,自己也疯玩了两天,后天就开学了,就正式大二了,该收收心好好学习啦                                                        ...
  • u013497151
  • u013497151
  • 2014年08月30日 14:51
  • 2264

【redis 基础篇一】redis初识

在JDB来了差不多一个月的时间了,在了解公司业务和框架的过程中,看到了在通过上游调用接口的过程中,使用到了redis来调用值,上游将一个参数传过来,我们通过这个参数去redis中读取部分参数,然后将所...
  • huo065000
  • huo065000
  • 2016年02月28日 18:57
  • 635
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:初识kafka
举报原因:
原因补充:

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