学习kafka:log4j写入kafka

最近花了一天时间把kafka官方文档看了一遍,自己测试了一下,特记录与此,原理概念看完文档就能理解,主要是问题。
1 版本POM配置 ,注意jar包可能会冲突:

 <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_2.10</artifactId>
            <version>0.8.2.2</version>
            <!--<exclusions>-->
            <!--<exclusion>-->
            <!--<groupId>org.slf4j</groupId>-->
            <!--<artifactId>slf4j-log4j12</artifactId>-->
            <!--</exclusion>-->
            <!--</exclusions>-->
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-log4j-appender -->
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-log4j-appender</artifactId>
            <version>0.10.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>

2 log4j配置:

log4j.rootLogger=INFO,console,KAFKA
## appender KAFKA
log4j.appender.KAFKA=kafka.producer.KafkaLog4jAppender
log4j.appender.KAFKA.topic=test
log4j.appender.KAFKA.brokerList=127.0.0.1:9092
log4j.appender.KAFKA.pa=127.0.0.1:9092

log4j.appender.KAFKA.compressionType=none
log4j.appender.KAFKA.syncSend=true
log4j.appender.KAFKA.layout=org.apache.log4j.PatternLayout
log4j.appender.KAFKA.ThresholdFilter.level=INFO
log4j.appender.KAFKA.ThresholdFilter.onMatch=ACCEPT
log4j.appender.KAFKA.ThresholdFilter.onMismatch=DENY

log4j.appender.KAFKA.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L %% - %m%n

## appender console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d (%t) [%p - %l] %m%n

3 测试代码:

package com.need.kafka.services.demo;

import com.need.kafka.services.utils.KafkaPropertiesManager;
import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;
import org.slf4j.impl.StaticLoggerBinder;
import org.slf4j.*;

import java.util.ArrayList;
import java.util.List;

/**
 * 这个是demo 主要用来测试生产者的单条信息发送和批量信息发送
 * <p/>
 */
public class ProducerDemo {

    private static final Logger log = LoggerFactory.getLogger(ProducerDemo.class);

    public static void main(String args[]) throws InterruptedException {
//        ProducerConfig producerConfig = new ProducerConfig(KafkaPropertiesManager.getProducerProps());
//        Producer<String, String> producer = new Producer<String, String>(producerConfig);
//        // 单个发送
//        for (int i = 0; i <= 10; i++) {
//            KeyedMessage<String, String> message =
//                    new KeyedMessage<String, String>(KafkaProperties.TEST_TOPIC, i + "", "Message" + i);
//            producer.send(message);
//        }
//
        // 批量发送
//        List<KeyedMessage<String, String>> messages = new ArrayList<KeyedMessage<String, String>>(100);
//        for (int i = 0; i <= 100; i++) {
//            KeyedMessage<String, String> message =
//                    new KeyedMessage<String, String>(KafkaProperties.TEST_TOPIC, i + "", "Message" + i);
//            messages.add(message);
//            if (i % 100 == 0) {
//                producer.send(messages);
//                messages.clear();
//            }
//        }
//        producer.send(messages);
        for(int i = 0;i <= 10; i++) {
                log.info("trace:This is Message [" + i + "] from log4j producer .. ");
                log.info("This is Message [" + i + "] from log4j producer .. ");
        }
    }
}

注意:类的来源,有的类不同jar都会有

4结果:

2017-05-21 10:41:09 INFO  ProducerDemo:44 % - trace:This is Message [5] from log4j producer ..

2017-05-21 10:41:09 INFO  ProducerDemo:45 % - This is Message [5] from log4j producer ..

2017-05-21 10:41:09 INFO  ProducerDemo:44 % - trace:This is Message [6] from log4j producer ..

2017-05-21 10:41:09 INFO  ProducerDemo:45 % - This is Message [6] from log4j producer ..

2017-05-21 10:41:09 INFO  ProducerDemo:44 % - trace:This is Message [7] from log4j producer ..

2017-05-21 10:41:09 INFO  ProducerDemo:45 % - This is Message [7] from log4j producer ..

2017-05-21 10:41:09 INFO  ProducerDemo:44 % - trace:This is Message [8] from log4j producer ..

2017-05-21 10:41:09 INFO  ProducerDemo:45 % - This is Message [8] from log4j producer ..

2017-05-21 10:41:09 INFO  ProducerDemo:44 % - trace:This is Message [9] from log4j producer ..

2017-05-21 10:41:09 INFO  ProducerDemo:45 % - This is Message [9] from log4j producer ..

2017-05-21 10:41:09 INFO  ProducerDemo:44 % - trace:This is Message [10] from log4j producer ..

2017-05-21 10:41:09 INFO  ProducerDemo:45 % - This is Message [10] from log4j producer ..

注释:最麻烦的可能就是原项目已经使用了log4j,引入了一堆jar,可能需要重新修改jar的引入。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Kafka是一个分布式流处理平台,常用于大规模数据的实时消息传输和处理。.log和.index是Kafka用于存储和管理消息的两个重要文件类型。 首先,.log文件是Kafka中存储实际消息内容的文件。每条消息都被追加到相应的.log文件中,以保证消息的顺序不变。Kafka的.log文件采用分段的方式进行管理,即一个.log文件会被分成多个固定大小的分段文件,每个分段文件称为一个日志段(log segment)。当一个.log文件达到指定大小时,Kafka会创建一个新的.log文件来继续存储消息。这种分段的存储方式,使得Kafka能够高效地追加写入消息,并支持快速的消息检索。 其次,.index文件是Kafka中用于记录消息在.log文件中位置信息的索引文件。每个.log文件对应一个.index文件,用于记录消息在.log文件中的偏移量和物理位置。通过索引文件,Kafka能够快速定位消息在日志段中的位置,以提高消息的读取效率。.index文件的存储方式采用稀疏索引(sparse index)的方式,即只记录部分消息的位置信息,以减小索引文件的尺寸,并提高索引的查询速度。 总结来说,Kafka的.log文件用于持久存储实际的消息内容,而.index文件则用于记录消息在.log文件中的位置信息。通过这两个文件的协同工作,Kafka能够实现高效的消息存储和读取,保证数据的顺序和一致性,并提供快速的消息检索和处理能力。这些特性使得Kafka成为一个可靠、高吞吐量的流处理平台,被广泛应用于大规模数据的实时处理场景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱美事爱生活

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值