kafka_2.11-0.8.2.1生产者producer的Java实现

1. 搭建Storm集群 http://blog.csdn.net/ch717828/article/details/50718783 

2. kafka集群环境搭建 http://blog.csdn.net/ch717828/article/details/50748872

3. storm+ kafka集成  http://blog.csdn.net/ch717828/article/details/50748912 

已经实现了 storm从 kafka 默认producer中获取消息并进行消费的功能。

那么如何通过 Log4J,向kafka发送消息呢。这篇文章记录一下实现过程。集群环境请看上面几篇。


1. 开启Kafka Consumer

首先选择集群的一台机器,打开kafka consumer,接收发送给kafka的消息。我选择的是 10.101.214.71这台机器。

通过以下命令打开 Consumer 。还不了解的可以看  kafka集群环境搭建 http://blog.csdn.net/ch717828/article/details/50748872

/usr/local/kafka_2.11-0.9.0.0/bin/kafka-console-consumer.sh --zookeeper 10.101.214.71:2181,10.101.214.73:2181,10.101.214.74:2181/kafka --from-beginning --topic my-replicated-topic5

2. Kafka配置文件修改

因为将要写的 Java代码在本地,而 kafka安装在集群的71,73,74这3台机器上。因此需要对kafka的配置文件做修改,下面以 71的配置为例,73,74的类似。

vim /usr/local/kafka/config/server.properties 

主要修改的内容为下面两行

 host.name=10.101.214.71 

 advertised.host.name=10.101.214.71


3. Java实现Kafka Producer

使用maven 管理依赖包,pom.xml如下

[html]  view plain  copy
  1. <dependency>  
  2.             <groupId>org.apache.kafka</groupId>  
  3.             <artifactId>kafka_2.11</artifactId>  
  4.             <version>0.8.2.1</version>  
  5.         </dependency>  
  6.   
  7.         <dependency>  
  8.             <groupId>org.apache.kafka</groupId>  
  9.             <artifactId>kafka-clients</artifactId>  
  10.             <version>0.8.2.1</version>  
  11.         </dependency>  


log4j.properties 配置如下

[html]  view plain  copy
  1. log4j.rootLogger=INFO,console  
  2.   
  3. #for package com.demo.kafka, log would be sent to kafka appender.  
  4.   
  5. log4j.logger.com.demo.kafka=DEBUG,kafka  
  6.   
  7. ## appender kafka  
  8. #log4j.appender.kafka=kafka.producer.KafkaLog4jAppender  
  9. #log4j.appender.kafka.topic=my-replicated-topic5  
  10. ## multiple brokers are separated by comma ",".  
  11. #log4j.appender.kafka.brokerList=10.101.214.71:9092,10.101.214.73:9092,10.101.214.74:9092  
  12. #log4j.appender.kafka.compressionType=none  
  13. #log4j.appender.kafka.syncSend=true  
  14. #log4j.appender.kafka.layout=org.apache.log4j.PatternLayout  
  15. #log4j.appender.kafka.layout.ConversionPattern=%d [%-5p] [%t] - [%l] %m%n  
  16.   
  17. # appender console  
  18. log4j.appender.console=org.apache.log4j.ConsoleAppender  
  19. log4j.appender.console.target=System.out  
  20. log4j.appender.console.layout=org.apache.log4j.PatternLayout  
  21. log4j.appender.console.layout.ConversionPattern=%d [%-5p] [%t] - [%l] %m%n  




Java实现代码如下,只做Demo使用,因此没有 close掉

[java]  view plain  copy
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3. import java.util.Properties;  
  4. import kafka.javaapi.producer.Producer;  
  5. import kafka.producer.KeyedMessage;  
  6. import kafka.producer.ProducerConfig;  
  7.   
  8. public class MyProducer {  
  9.     private static final String TOPIC = "my-replicated-topic5"//kafka创建的topic  
  10.     private static final String CONTENT = "This is a single message"//要发送的内容  
  11.     private static final String BROKER_LIST = "10.101.214.71:9092,10.101.214.73:9092,10.101.214.74:9092"//broker的地址和端口  
  12.     private static final String SERIALIZER_CLASS = "kafka.serializer.StringEncoder"// 序列化类  
  13.   
  14.     public static void main(String[] args) {  
  15.         Properties props = new Properties();    
  16.         props.put("serializer.class", SERIALIZER_CLASS);  
  17.         props.put("metadata.broker.list", BROKER_LIST);  
  18.   
  19.   
  20.         ProducerConfig config = new ProducerConfig(props);  
  21.         Producer<String, String> producer = new Producer<String, String>(config);  
  22.   
  23.         //Send one message.  
  24.         KeyedMessage<String, String> message =  
  25.                 new KeyedMessage<String, String>(TOPIC, CONTENT);  
  26.         producer.send(message);  
  27.   
  28.         //Send multiple messages.  
  29.         List<KeyedMessage<String,String>> messages =  
  30.                 new ArrayList<KeyedMessage<String, String>>();  
  31.         for (int i = 0; i < 5; i++) {  
  32.             messages.add(new KeyedMessage<String, String>  
  33.                     (TOPIC, "Multiple message at a time. " + i));  
  34.         }  
  35.         producer.send(messages);  
  36.   
  37.     }  
  38. }  

运行这段代码,同时观察 Kafka Consumer的输出。可以看到输出信息为

[plain]  view plain  copy
  1. This is a single message  
  2. Multiple message at a time. 0  
  3. Multiple message at a time. 1  
  4. Multiple message at a time. 2  
  5. Multiple message at a time. 3  
  6. Multiple message at a time. 4  

此时完成了 java来向kafka产生消息。  下面一篇文章,记录 使用storm来消费这些消息。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值