使用Kafka 0.8.1.1,如何在运行时更改日志保留时间?该文件说,财产是log.retention.hours
,而是试图用它来改变kafka-topics.sh
返回此错误
$ bin/kafka-topics.sh --zookeeper zk.yoursite.com --alter --topic as-access --config topic.log.retention.hours=24
Error while executing topic command requirement failed: Unknown configuration "topic.log.retention.hours".
java.lang.IllegalArgumentException: requirement failed: Unknown configuration "topic.log.retention.hours".
at scala.Predef$.require(Predef.scala:145)
at kafka.log.LogConfig$$anonfun$validateNames$1.apply(LogConfig.scala:138)
at kafka.log.LogConfig$$anonfun$validateNames$1.apply(LogConfig.scala:137)
at scala.collection.Iterator$class.foreach(Iterator.scala:631)
at scala.collection.JavaConversions$JEnumerationWrapper.foreach(JavaConversions.scala:479)
at kafka.log.LogConfig$.validateNames(LogConfig.scala:137)
at kafka.log.LogConfig$.validate(LogConfig.scala:145)
at kafka.admin.TopicCommand$.parseTopicConfigsToBeAdded(TopicCommand.scala:171)
at kafka.admin.TopicCommand$$anonfun$alterTopic$1.apply(TopicCommand.scala:95)
at kafka.admin.TopicCommand$$anonfun$alterTopic$1.apply(TopicCommand.scala:93)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:57)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:43)
at kafka.admin.TopicCommand$.alterTopic(TopicCommand.scala:93)
at kafka.admin.TopicCommand$.main(TopicCommand.scala:52)
at kafka.admin.TopicCommand.main(TopicCommand.scala)
Run Code Online (Sandbox Code Playgroud) 我很清楚它的含义RetentionPolicy
并且知道它们的作用以及何时使用它们似乎是有意义的.对于我自己的注释,我确切地知道它们是在运行时,类文件中还是仅仅用于编译时需要的.但是,使用库中定义的任何注释,您可以恕我直言.
例如,javax.annotation.Generated
意味着标记生成的代码,但它很少有用.由于有更多的AFAIK工具对字节码比与源工作工具工作,这些信息就会消失,可以使用之前它.
由于在运行时缺少注释不会抛出 ClassNotFoundException
(不像例如,缺少接口),使用RetentionPolicy.RUNTIME
似乎不会造成伤害.还是我错了?
或者节省了几个字节使用不同Retention
s 的原因?对我来说,这似乎导致太多问题值得.我错过了什么?
是否可以使用任何log4j附加程序写入具有特定轮换时间和保留限制的日志。
目标是:
似乎可以旋转,但使用log4j不可能限制保留时间
log4j版本为1.2。
我正在阅读《Kafka:权威指南》第一版这本书来了解代理何时删除日志段。
根据我理解的文本,一个段在关闭之前不会被删除。仅当段达到 log.segment.bytes 大小时才能关闭(考虑未设置 log.segment.ms)。一旦某个段符合删除条件,log.retention.ms 策略将应用以最终决定何时删除该段。
然而,这似乎与我在生产集群(Kafka 2.5 版)中看到的行为相矛盾。
一旦满足 log.retention.ms,日志段就会被删除,即使段大小小于 log.segment.bytes。
[2020-12-24 15:51:17,808] INFO [日志分区=Topic-2,dir=/Folder/Kafka_data/kafka]由于保留时间604800000ms违规(kafka.log.日志)
[2020-12-24 15:51:17,808] INFO [日志分区=Topic-2, dir=/Folder/Kafka_data/kafka] 调度删除段 List(LogSegment(baseOffset=165828, size= 895454171 , lastModifiedTime=1608220234000,最大时间=1608220234478)) (kafka.log.Log)
大小仍然小于 1GB,但该段已被删除。
该书在新闻发布时提到 Kafka 版本是 0.9.0.1 。这个设置在 Kafka 的后续版本中也发生了变化。(我在 Kafka 文档中找不到任何具体提及此更改的信息)。以下是书中的片段。
即使指定“retention_period: 12h”,“12h”旧日志也不会删除,因此我面临存储问题,因为日志不会删除。请帮我配置
loki:
enabled: true
isDefault: true
table_manager:
retention_deletes_enabled: true
retention_period: 12h
Run Code Online (Sandbox Code Playgroud) 我在Kafka 0.8.1.1中的server.properties文件中进行了更改,即在创建主题时添加log.cleaner.enable=true
并启用cleanup.policy=compact
了.现在,当我测试它时,我将以下消息推送到主题,其中包含以下内容(Key,Message).
现在我用与早期输入相同的键推送第4条消息,但更改了消息.这里的日志压缩应该会出现.使用Kafka工具,我可以看到主题中的所有4个偏移.我怎么知道日志压缩是否有效?是否应删除先前的消息,或者在推送新消息时日志压缩工作正常.是否有做的任何事情log.retention.hours
或topic.log.retention.hours
或log.retention.size
配置?这些配置在日志压缩中的作用是什么.PS - 我已经彻底浏览了Apache文档,但仍然不清楚.
我有一个像这样的pandas数据框:
+-----------+------------------+---------------+------------+
| AccountID | RegistrationWeek | Weekly_Visits | Visit_Week |
+-----------+------------------+---------------+------------+
| ACC1 | 2015-01-25 | 0 | NaT |
| ACC2 | 2015-01-11 | 0 | NaT |
| ACC3 | 2015-01-18 | 0 | NaT |
| ACC4 | 2014-12-21 | 14 | 2015-02-12 |
| ACC5 | 2014-12-21 | 5 | 2015-02-15 |
| ACC6 | 2014-12-21 | 0 | 2015-02-22 |
+-----------+------------------+---------------+------------+
Run Code Online (Sandbox Code Playgroud)
它本质上是一种各种访问日志,因为它包含创建队列分析所需的所有数据.
每个注册周都是一个队列.要知道我可以使用的人群中有多少人:
visit_log.groupby('RegistrationWeek').AccountID.nunique()
Run Code Online (Sandbox Code Playgroud)
我想要做的是创建一个数据透视表,其中注册周作为键.列应为visit_weeks,值应为每周访问次数超过0次的唯一帐户ID的计数.
连同每个队列中的总帐户,我将能够显示百分比而不是绝对值.
最终产品看起来像这样:
+-------------------+-------------+-------------+-------------+
| Registration Week | Visit_week1 | …
Run Code Online (Sandbox Code Playgroud) 我们正在使用一些Graylog2服务器(graylog-server版本1.3.4).因为我们收到太多日志消息,所以需要大量内存.我正在尝试将日志保留时间减少到1周,每个超过1周的日志消息都将被删除.但是,我无法在配置文件中找到任何值来做到这一点.
我使用了"max_time_per_index = 7d"值,但max_time_per_index似乎只是定义了索引的年龄,直到它被旋转并且正在创建新索引,而不是该索引中的消息.
那么,将邮件保留时间设置为1周的最佳方法是什么?请帮我.非常感谢.
对于数据集test
,我的目标是找出有多少独特用户在一个时期内从一个时期转移到下一个时期.
> test
user_id period
1 1 1
2 5 1
3 1 1
4 3 1
5 4 1
6 2 2
7 3 2
8 2 2
9 3 2
10 1 2
11 5 3
12 5 3
13 2 3
14 1 3
15 4 3
16 5 4
17 5 4
18 5 4
19 4 4
20 3 4
Run Code Online (Sandbox Code Playgroud)
例如,在第一个时期,有四个唯一用户(1,3,4和5),其中两个在第二个时期有效.因此保留率为0.5.在第二个时期,有三个独特的用户,其中两个在第三个时期有效,因此保留率为0.666,依此类推.如何找到下一期间活跃的唯一身份用户的百分比?任何建议,将不胜感激.
输出如下:
> output
period retention
1 1 NA
2 2 0.500
3 …
Run Code Online (Sandbox Code Playgroud) 我在Azure上运行了多个Windows VM,这些Windows VM配置为收集性能计数器和事件日志。
所有这些都在Azure Portal内VM资源的“诊断设置...”中进行配置。有一个Windows Azure Diagnostics代理,可在VM上收集此数据并将其存储到存储帐户(表存储内部)中。
所有收集的数据(性能计数器,指标,日志等)都没有任何保留策略,而且似乎没有任何设置方法。因此,它只会永久存储在存储帐户的表存储中。
这就是我的问题所在-这些表中现在有太多数据(在我的情况下为几个TB),仅保留它就花费了很多钱。而且它只会随着时间的推移而不断增加。
相关的存储帐户表如下所示:
WADMetrics*
(Windows Azure诊断指标表)WADPerformanceCountersTable
(Windows Azure诊断性能计数器表)WASWindowsEventLogsTable
(Windows Azure诊断Windows事件日志表)有什么方法可以删除这些表中的旧数据,从而不会破坏任何数据吗?甚至更好的是,是否有某种方法可以配置或设置保留策略,以使其不会永远累积下去?
azure azure-storage azure-table-storage azure-diagnostics retention
retention ×10
apache-kafka ×3
java ×2
logging ×2
annotations ×1
azure ×1
dplyr ×1
grafana-loki ×1
graylog2 ×1
kafka-topic ×1
log4j ×1
pandas ×1
promtail ×1
purge ×1
python ×1
r ×1