<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>하하하하하</title>
    <link>https://forgiveall.tistory.com/</link>
    <description>https://jmeetsz.com</description>
    <language>ko</language>
    <pubDate>Tue, 21 Jul 2026 15:23:55 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>forgiveall</managingEditor>
    <image>
      <title>하하하하하</title>
      <url>https://t1.daumcdn.net/cfile/tistory/240EC03B555C1EBF27</url>
      <link>https://forgiveall.tistory.com</link>
    </image>
    <item>
      <title>[Docker] docker: write /DB/tmp/GetImageBlob275657822: no space left on device.</title>
      <link>https://forgiveall.tistory.com/624</link>
      <description>&lt;h1&gt;Docker&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;환경&lt;ul&gt;
&lt;li&gt;CentOS Linux release 7.9.2009 (Core)&lt;/li&gt;
&lt;li&gt;Docker 20.10.5, build 55c4c88&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;1. Error - 오류&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker: write /DB/tmp/GetImageBlob275657822: no space left on device.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;새로운 Docker Image를 불러오는 과정에서 &amp;quot;&lt;code&gt;장치에 남은 저장공간이 없다&lt;/code&gt;&amp;quot; 라는 메시지를 받는다.  &lt;/p&gt;
&lt;h2&gt;2. Problem - 문제&lt;/h2&gt;
&lt;p&gt;용량이 부족합니다.&lt;/p&gt;
&lt;p&gt;Docker Image 저장경로의 파티션의 용량이 부족한 상황이 발생.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Docker 이미지(image) 기본 저장경로&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;  /var/lib/docker&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;용량 확인하기&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-groovy&quot;&gt;  df -h&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. Solved - 해결&lt;/h2&gt;
&lt;h3&gt;방법-가) 파티션의 용량을 확보합니다.&lt;/h3&gt;
&lt;h3&gt;방법-나) Image 저장경로의 파티션 용량을 변경하거나&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ref&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://serverfault.com/questions/771921/how-to-shrink-home-and-add-more-space-on-centos7&quot;&gt;https://serverfault.com/questions/771921/how-to-shrink-home-and-add-more-space-on-centos7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://knoow.tistory.com/179&quot;&gt;https://knoow.tistory.com/179&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;예1) Home용량을 줄이고 Root용량 늘리기&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;backup the contents of /home&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; tar -czvf /root/home.tgz -C /home .&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;test the backup&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; tar -tvf /root/home.tgz&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;unmount home&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; umount /dev/mapper/centos-home&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;remove the home logical volume&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; lvremove /dev/mapper/centos-home&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;recreate a new 400GB logical volume for /home, format and mount it&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;lvcreate -L 400GB -n home centos
mkfs.xfs /dev/centos/home
mount /dev/mapper/centos-home&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;extend your /root volume with ALL of the remaining space and resize (-r) the file system while doing so&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; lvextend -r -l +100%FREE /dev/mapper/centos-root&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;restore your backup&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; tar -xzvf /root/home.tgz -C /home&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;방법-다) Image 저장경로를 여유가 있는 파티션영역으로 변경합니다.&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ref&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://tiqndjd12.tistory.com/60&quot;&gt;https://tiqndjd12.tistory.com/60&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;예1)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;image를 저장할 경로를 정합니다. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;경로가 없다면 미리 생성합니다.&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;  mkdir /home/docker-images&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;설정파일을 편집합니다.&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;  sudo vi /lib/systemd/system/docker.service&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ExecStart&lt;/code&gt;를 정의하는 부분에 &lt;code&gt;--data-root=/home/docker-images/&lt;/code&gt; 옵션을 추가해줍니다.&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;  ExecStart=/usr/bin/dockerd -g /DB -H fd:// --containerd=/run/containerd/containerd.sock&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;  ExecStart=/usr/bin/dockerd -g /DB -H fd:// --containerd=/run/containerd/containerd.sock --data-root=/home/docker-images/&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;docker service를 다시 시작합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; sudo service docker stop&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; sudo service docker status&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; sudo service docker start&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; sudo service docker status&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;확인합니다.    &lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt; sudo docker info grep | Root&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>LANGUAGE/!$%!% ERROR NOTE</category>
      <category>docker</category>
      <category>image</category>
      <category>no space</category>
      <author>forgiveall</author>
      <guid isPermaLink="true">https://forgiveall.tistory.com/624</guid>
      <comments>https://forgiveall.tistory.com/624#entry624comment</comments>
      <pubDate>Mon, 25 Oct 2021 12:07:42 +0900</pubDate>
    </item>
    <item>
      <title>[Groovy] TestAnnotationValue.groovy: -1: Attribute 'shortProp2' should have type 'java.lang.Short'; but found type 'java.lang.Integer' in @test.bug.annotation.TestAnnotation</title>
      <link>https://forgiveall.tistory.com/623</link>
      <description>&lt;h1&gt;Groovy&lt;/h1&gt;
&lt;p&gt;Bug Report&lt;/p&gt;
&lt;h2&gt;1. Error - 오류&lt;/h2&gt;
&lt;p&gt;이전에는 Annotation Interface를 정의 할 때 문제가 발생했었는데 (&lt;a href=&quot;https://issues.apache.org/jira/browse/GROOVY-6025&quot;&gt;https://issues.apache.org/jira/browse/GROOVY-6025&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;이번 Error는 Annotation을 적용하고 short값을 정의 할 때 문제가 발생한다.&lt;/p&gt;
&lt;p&gt;Test해 본 결과, 2.5.4 버전부터 발생하는 것으로 보인다. ㅠ_ㅠ&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;\\some\\project\\TestAnnotationValue_Groovy.groovy: -1: Attribute &amp;#39;shortProp2&amp;#39; should have type &amp;#39;java.lang.Short&amp;#39;; but found type &amp;#39;java.lang.Integer&amp;#39; in @test.bug.annotation.TestAnnotation&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;동작하는 버전&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Groovy between 2.1.3 and 2.5.3 (tested by 2.1.3 / 2.4.13 / 2.5.3)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;동작하지 않는 버전&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Since Groovy 2.5.4. (tested by 2.5.4 / 2.5.14 / 3.0.8)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Problem - 문제&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;버그&lt;/code&gt; 같다. 또는 지원하지 않을 것 같다.&lt;/p&gt;
&lt;h2&gt;3. Not Solved - 미해결&lt;/h2&gt;
&lt;p&gt;short을 사용하지 않고 &lt;code&gt;int로 우회해서 사용해야 할 것 같다.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;개인적으로 이건 꼭 개선되었으면 해서 Groovy Jira에 찾아가서 report를 남겼다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cannot compile when set short value to annotation by already defined short variable since version 2.5.4: &lt;a href=&quot;https://issues.apache.org/jira/browse/GROOVY-10068&quot;&gt;https://issues.apache.org/jira/browse/GROOVY-10068&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Test Code&lt;/h3&gt;
&lt;p&gt;Groovy 개발자님들이 해결해주시길 간절하게 바라며..&lt;/p&gt;
&lt;p&gt;Test Code를 작성해보았다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;/**
 * 1. Create some annotation.
 */
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {

    short shortProp1() default (short) -1;
    short shortProp2() default (short) -1;

    int intProp1() default -1;
    int intProp2() default -1;

    long longProp1() default -1L;
    long longProp2() default -1L;

    boolean booleanProp() default false;

}&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;/**
 * 2. Create code values for annotation.
 */
public interface TestCode {

    public final static short SHORT_0 = 0;

    public final static short SHORT_1 = 0;

    public final static int INT_0 = 0;

    public final static int INT_1 = 1;

    public final static long LONG_0 = 0L;

    public final static long LONG_1 = 1L;

}&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;/**
 * 3-1. It all works on Java class
 */
@TestAnnotation(
        intProp1 = 1,
        intProp2 = TestCode.INT_1,
        longProp1 = 1L,
        longProp2 = TestCode.LONG_1,
        shortProp1 = 1,
        shortProp2 = TestCode.SHORT_1,
        intProp3 = TestCode.SHORT_1
)
class TestAnnotationValue_Java {

    Integer objectId;

}&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;/**
 * 3-2. &amp;#39;int&amp;#39; and &amp;#39;long&amp;#39; works on all version of groovy
 *      But &amp;#39;short&amp;#39; does not works on some groovy version.
 */
@TestAnnotation(
        intProp1 = 1,
        intProp2 = TestCode.INT_1,

        longProp1 = 1L,
        longProp2 = TestCode.LONG_1,

        /**
         * Defining directly
         *  - It always does not works on groovy class
         **/
//        shortProp1 = 1,

        /**
         * [SOLUTION 2.1.3 ~ 2.5.3]  Defining as an already defined short variable
         *  - It works on Groovy between 2.1.3 and 2.5.3 (tested by 2.1.3 / 2.4.13 / 2.5.3)
         *  - But, It does not works since Groovy 2.5.4. (tested by 2.5.4 / 2.5.14 / 3.0.8)
         **/
//        shortProp2 = TestCode.SHORT_1,

        /**
         * [SOLUTION 2.5.4 ~ ..]  Defining as an already defined short variable
         *  - It works since Groovy 2.5.4
         *  - But, It does not works before Groovy 2.5.4.
         **/
        intProp3 = TestCode.SHORT_1
)
class TestAnnotationValue_Groovy {

    Integer objectId

}&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;4. Reference - 참조&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cannot compile when set short value to annotation by already defined short variable since version 2.5.4: &lt;a href=&quot;https://issues.apache.org/jira/browse/GROOVY-10068&quot;&gt;https://issues.apache.org/jira/browse/GROOVY-10068&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Groovy] Error:Groovyc: Attribute &amp;#39;bar&amp;#39; should have type &amp;#39;java.lang.Short&amp;#39;; but found type &amp;#39;java.lang.Object&amp;#39;: &lt;a href=&quot;https://forgiveall.tistory.com/430&quot;&gt;https://forgiveall.tistory.com/430&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Using short, byte, char annotation definition attribute constants should be supported: &lt;a href=&quot;https://issues.apache.org/jira/browse/GROOVY-6025&quot;&gt;https://issues.apache.org/jira/browse/GROOVY-6025&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>LANGUAGE/!$%!% ERROR NOTE</category>
      <author>forgiveall</author>
      <guid isPermaLink="true">https://forgiveall.tistory.com/623</guid>
      <comments>https://forgiveall.tistory.com/623#entry623comment</comments>
      <pubDate>Sun, 2 May 2021 15:56:00 +0900</pubDate>
    </item>
    <item>
      <title>[Lettuce]  java.lang.ClassNotFoundException: reactor.core.scheduler.Schedulers</title>
      <link>https://forgiveall.tistory.com/622</link>
      <description>&lt;h1&gt;Redis&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;※ 환경&lt;ul&gt;
&lt;li&gt;Spring Boot 1.5.4&lt;/li&gt;
&lt;li&gt;Java 1.8&lt;/li&gt;
&lt;li&gt;Lettuce 5.0.1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;1. Error - 오류&lt;/h2&gt;
&lt;p&gt;Redis 맛 좀 보기 위해서&lt;/p&gt;
&lt;p&gt;나의 &lt;code&gt;Spring Boot 1.5.4&lt;/code&gt; Project속 특정 하위 모듈에 &lt;code&gt;io.lettuce:lettuce-core:5.0.1.RELEASE&lt;/code&gt;를 Dependencies로 추가해 봤다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;build.gradle&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-groovy&quot;&gt;  dependencies {
      ...
      implementation &amp;#39;io.lettuce:lettuce-core:5.0.1.RELEASE&amp;#39;
      ...
  }&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;음~ 모듈 테스트는 아주 잘되지만.. bootRun 해보았더니, 다음 &lt;code&gt;Error가 발생&lt;/code&gt;하였다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;2021-04-10 17:37:39.857 DEBUG 9792 --- [           main] i.n.util.ResourceLeakDetectorFactory     : Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@1eb9ab8f
2021-04-10 17:37:39.863 DEBUG 9792 --- [           main] i.netty.util.internal.PlatformDependent  : org.jctools-core.MpscChunkedArrayQueue: available
2021-04-10 17:37:39.915  WARN 9792 --- [      Finalizer] i.l.c.resource.DefaultClientResources    : io.lettuce.core.resource.DefaultClientResources was not shut down properly, shutdown() was not called before it&amp;#39;s garbage-collected. Call shutdown() or shutdown(long,long,TimeUnit) 
2021-04-10 17:37:39.962 ERROR 9792 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name &amp;#39;redisConfig&amp;#39;: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: reactor/core/scheduler/Schedulers
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:137) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) ~[spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
    at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134) [spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
    at org.springframework.boot.builder.SpringApplicationBuilder$run.call(Unknown Source) [spring-boot-1.5.4.RELEASE.jar:1.5.4.RELEASE]
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) [groovy-2.4.11.jar:2.4.11]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) [groovy-2.4.11.jar:2.4.11]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) [groovy-2.4.11.jar:2.4.11]
    at com.datastreams.mdosa.boot.Application.main(Application.groovy:53) [main/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_211]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_211]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_211]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_211]
    at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:64) [idea_rt.jar:na]
Caused by: java.lang.NoClassDefFoundError: reactor/core/scheduler/Schedulers
    at io.lettuce.core.resource.DefaultClientResources.&amp;lt;init&amp;gt;(DefaultClientResources.java:171) ~[lettuce-core-5.0.1.RELEASE.jar:na]
    at io.lettuce.core.resource.DefaultClientResources$Builder.build(DefaultClientResources.java:461) ~[lettuce-core-5.0.1.RELEASE.jar:na]
    at io.lettuce.core.resource.DefaultClientResources.create(DefaultClientResources.java:229) ~[lettuce-core-5.0.1.RELEASE.jar:na]
    at io.lettuce.core.AbstractRedisClient.&amp;lt;init&amp;gt;(AbstractRedisClient.java:96) ~[lettuce-core-5.0.1.RELEASE.jar:na]
    at io.lettuce.core.RedisClient.&amp;lt;init&amp;gt;(RedisClient.java:86) ~[lettuce-core-5.0.1.RELEASE.jar:na]
    at io.lettuce.core.RedisClient.create(RedisClient.java:135) ~[lettuce-core-5.0.1.RELEASE.jar:na]
    at com.datastreams.mdosa.redis.config.RedisCon.redisClient(RedisCon.java:19) ~[main/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_211]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_211]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_211]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_211]
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE]
    ... 26 common frames omitted
Caused by: java.lang.ClassNotFoundException: reactor.core.scheduler.Schedulers
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_211]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_211]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_211]
    ... 40 common frames omitted&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2. Problem - 문제&lt;/h2&gt;
&lt;p&gt;SpringBoot는 Vesion 2 부터 Lettuce를 지원한다.&lt;/p&gt;
&lt;p&gt;근본적으로 Lettuce 5.0.1 에서는 &lt;code&gt;io.projectreactor:reactor-core:3.1.2.RELEASE&lt;/code&gt;를 의존하고 있는데&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Spring Boot 1.4&lt;/code&gt; 또는 &lt;code&gt;1.5&lt;/code&gt;에서 낮은 버전의 동일 의존성(&lt;strong&gt;io.projectreactor:reactor-core:2.0.8.RELEASE&lt;/strong&gt;)을 가지고 있기 때문에&lt;/p&gt;
&lt;p&gt;충돌이 일어나서 &lt;code&gt;낮은 버전을 참조하고 있기 때문이다.&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;build.gradle&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-groovy&quot;&gt;  dependencies {
      ...
      implementation &amp;#39;io.lettuce:lettuce-core:5.0.1.RELEASE&amp;#39;
      ...
  }&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. Solved - 해결&lt;/h2&gt;
&lt;h3&gt;[방법 가]. Spring Boot 2로 업그레이드&lt;/h3&gt;
&lt;p&gt;Spring Boot 2 부터 Lettuce를 지원한다 하니 해당 버전을 사용하는 것이 더 바람직 하겠다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;build.gradle&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-groovy&quot;&gt;  dependencies {
      ...
      implementation &amp;quot;org.springframework.boot:spring-boot-starter-data-redis:${spring_boot_version}&amp;quot;
      ...
  }&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;따로 Jedis와 다르게 Lettuce는 의존성 따로 명시 하지 않아도 된다고 하는데.. (나중에 해보고 다시 적겠다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;[방법 나]. 강제 명시&lt;/h3&gt;
&lt;p&gt;당신의 Main 모듈에서 강제로 의존성을 걸어 주어야 한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;build.gradle&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-groovy&quot;&gt;  dependencies {
      ...
      implementation &amp;quot;io.projectreactor:reactor-core:3.1.2.RELEASE&amp;quot;
      ...
  }&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;4. Reference - 참조&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Introduction to Lettuce – the Java Redis Client: &lt;a href=&quot;https://www.baeldung.com/java-redis-lettuce&quot;&gt;https://www.baeldung.com/java-redis-lettuce&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;NoClassDefFoundError: reactor/core/scheduler/Schedulers: &lt;a href=&quot;https://github.com/mokies/ratelimitj/issues/10#issuecomment-349818518&quot;&gt;https://github.com/mokies/ratelimitj/issues/10#issuecomment-349818518&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;java.lang.ClassNotFoundException: reactor.core.scheduler.Schedulers: &lt;a href=&quot;https://github.com/lettuce-io/lettuce-core/issues/801#issuecomment-397693617&quot;&gt;https://github.com/lettuce-io/lettuce-core/issues/801#issuecomment-397693617&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>LANGUAGE/!$%!% ERROR NOTE</category>
      <author>forgiveall</author>
      <guid isPermaLink="true">https://forgiveall.tistory.com/622</guid>
      <comments>https://forgiveall.tistory.com/622#entry622comment</comments>
      <pubDate>Thu, 22 Apr 2021 18:52:47 +0900</pubDate>
    </item>
    <item>
      <title>[Kafka] 시작</title>
      <link>https://forgiveall.tistory.com/621</link>
      <description>&lt;h1&gt;Kafka&lt;/h1&gt;
&lt;p&gt;큰 인프라의 개발환경을 경험하는 개발자가 아니지만, 어찌저찌 &lt;code&gt;Kafka를 구축하는 Project를 경험&lt;/code&gt;하였다.&lt;/p&gt;
&lt;p&gt;자료와 정보를 얻기가 정말 힘들었고 혼란도 많았지만.. 나름대로 &lt;code&gt;내용을 간단히 정리&lt;/code&gt;해 보았다.&lt;/p&gt;
&lt;h2&gt;1. Kafka 소개&lt;/h2&gt;
&lt;h3&gt;1-1. 개요&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;LinkedIn 개발자들이 만들었다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;고가용성&lt;/code&gt;, &lt;code&gt;확장성&lt;/code&gt;, &lt;code&gt;고성능&lt;/code&gt;, &lt;code&gt;분산 데이터 스트리밍 플랫폼&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;※ &lt;strong&gt;고가용성&lt;/strong&gt;(高可用性, HA, High Availability): 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질 (&lt;a href=&quot;https://ko.wikipedia.org/wiki/%EA%B3%A0%EA%B0%80%EC%9A%A9%EC%84%B1&quot;&gt;Wiki&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;※ &lt;strong&gt;확장성&lt;/strong&gt;(Scale-Out): 장비를 추가해서 확장하여 성능을 향상시키는 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Loosely Coupled&lt;/code&gt;, &lt;code&gt;FileSystem&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;구독-발행 모델의 메세지 큐 (Pub-Sub Model Message Queue)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;1-2. 요약&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;[&lt;strong&gt;Producer&lt;/strong&gt;] ==&amp;gt; (Zookeeper:[&lt;strong&gt;Kafka-Sever&lt;/strong&gt;],[&lt;strong&gt;Kafka-Sever&lt;/strong&gt;]...) ==&amp;gt; [&lt;strong&gt;Consumer&lt;/strong&gt;]&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Zookeeper&lt;/code&gt;: &amp;#39;분산 코디네이션 서비스&amp;#39;를 제공하는 오픈소스 프로젝트로서, Kafka는 Zookeeper로 클러스터를 구성한다. 단일 구성시에도 필수.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Broker&lt;/code&gt;: &lt;strong&gt;Topic&lt;/strong&gt;(주제) 단위로 &lt;code&gt;Message&lt;/code&gt;들을 관리합니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Topic&lt;/code&gt;(주제): 1개 이상으로 구성된 &lt;code&gt;Partition&lt;/code&gt;에 분산되어 Message가 저장되게 하는 논리 단위.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Producer&lt;/code&gt;: 특정 Topic에 Message들을 &lt;code&gt;Publish&lt;/code&gt;(발행)한다. Message는 각 Partition에 나뉘어 저장된다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Consumer&lt;/code&gt;: Topic을 Message들을 &lt;code&gt;Subscribe&lt;/code&gt;(구독)한다. 성공적으로 읽어갈 때마다 Partition 내의 &lt;code&gt;Offset&lt;/code&gt;(위치)를 Commit한다. 다시 Topic에 접근할 때는 해당 Offset 정보를 통해 이어서 읽어 갈 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Consumer Group&lt;/code&gt;: 1개의 Topic에 대응하는 Consumer가 Publish 속도 등에 균형을 맞추기 위해 &lt;code&gt;Consumer 확장&lt;/code&gt; 기능.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Rebalance&lt;/code&gt;: &lt;strong&gt;Consumer Group&lt;/strong&gt;에 &lt;strong&gt;Consumer&lt;/strong&gt;가 추가/삭제될 때, 소유권 이동이 발생하는 현상&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Replication&lt;/code&gt;: 장애에 대비하여 &lt;code&gt;데이터 유실을 방지&lt;/code&gt;, &lt;strong&gt;지속적인 서비스를 제공&lt;/strong&gt;하기 위해 구성&lt;ul&gt;
&lt;li&gt;Topic 단위로 &lt;code&gt;Replication Factor&lt;/code&gt;를 지정한다. 지정한 수 만큼 Broker에 복제한다.&lt;/li&gt;
&lt;li&gt;내부적으로는 &lt;strong&gt;Partition 별로 복제&lt;/strong&gt;한다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ISR&lt;/code&gt;(In Sync Replica): Replication Group을 의미. 1개의 Leader와 여러개의 Follower로 구성한다.&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Leader&lt;/code&gt;:&lt;ul&gt;
&lt;li&gt;Leader를 통해서만 &lt;strong&gt;읽기/쓰기 작업이 진행된다.&lt;/strong&gt; 장애가 발생되어도 정상인 Broker가 있다면, 새로운 Leader Broker가 선출된다.&lt;/li&gt;
&lt;li&gt;Leader는 주기적으로 Follower를 감시하고, 일정시간 동안 반응이 없다면 ISR 그룹에서 추방한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Follower&lt;/code&gt;:&lt;ul&gt;
&lt;li&gt;Leader의 data를 &lt;strong&gt;그대로 복제&lt;/strong&gt;한다.&lt;/li&gt;
&lt;li&gt;Leader의 data와 같은 형상을 유지하기 위해 짧은 주기로 동기화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;2. Kafka 환경&lt;/h2&gt;
&lt;h3&gt;2-1. 필수&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;OS: &lt;code&gt;Linux&lt;/code&gt; / Windows&lt;/li&gt;
&lt;li&gt;JDK: &lt;code&gt;Kafka 버전별 호환되는 JDK 버전을 확인!&lt;/code&gt;&lt;ul&gt;
&lt;li&gt;대체로 &lt;code&gt;Java8&lt;/code&gt; 이 일반적. (2021년 4월 기준)&lt;/li&gt;
&lt;li&gt;2.0.0 부터는 Java7 중단.&lt;/li&gt;
&lt;li&gt;2.1.0 부터는 Java11 지원.&lt;/li&gt;
&lt;li&gt;※ Confluent Platform을 사용자 참조: &lt;a href=&quot;https://docs.confluent.io/platform/current/installation/versions-interoperability.html&quot;&gt;https://docs.confluent.io/platform/current/installation/versions-interoperability.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2-2. 필요성&lt;/h3&gt;
&lt;p&gt;Kafka 사용전, 먼저 &lt;code&gt;어떤 Data(Message)를 취급할 것인가를 확인!&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A) 단순 Log Data인가?&lt;ul&gt;
&lt;li&gt;Log성 누적 정보인가?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;B) 식별 Data인가?&lt;ul&gt;
&lt;li&gt;날짜 Data가 포함된 Message인가?&lt;/li&gt;
&lt;li&gt;순차적 숫자 Data가 포함된 Message인가?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;C) 변경사항 Data인가?&lt;ul&gt;
&lt;li&gt;변경 Data가 포함된 Message인가?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2-3. 제품&lt;/h3&gt;
&lt;p&gt;Web상에서 정보검색시, 혼란스럽지 않도록 알아야 할 몇몇 솔루션 알기.&lt;/p&gt;
&lt;p&gt;&amp;#39;&lt;strong&gt;Apache Kafka&lt;/strong&gt;&amp;#39;와 &amp;#39;&lt;strong&gt;Confluent Platform으로 구성된 Kafka&lt;/strong&gt;&amp;#39;의 구성과 설정이 조금은 상이할 수 있기에 유의해야 한다.&lt;/p&gt;
&lt;h4&gt;2-3-1. Apache Kafka&lt;/h4&gt;
&lt;p&gt;OpenSource로 개발되고 있다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-&lt;/th&gt;
&lt;th&gt;-&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;URL&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://kafka.apache.org/&quot;&gt;http://kafka.apache.org/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Download&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://kafka.apache.org/downloads&quot;&gt;https://kafka.apache.org/downloads&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;APACHE LICENSE, VERSION 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick Start&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://kafka.apache.org/quickstart&quot;&gt;local&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;2-3-2. Confluent Platform&lt;/h4&gt;
&lt;p&gt;Apache Kafka를 활용하여, &lt;code&gt;Confluent 사에서 다양한 기능과 솔루션을 제공&lt;/code&gt;하고 있다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;무료 Community License&lt;/code&gt;로도 여러 Connector와 편리한 도구를 제공하고 있다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-&lt;/th&gt;
&lt;th&gt;-&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;URL&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.confluent.io/get-started/#confluent-platform&quot;&gt;https://www.confluent.io/get-started/#confluent-platform&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Download&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.confluent.io/get-started/#confluent-platform&quot;&gt;https://www.confluent.io/get-started/#confluent-platform&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.confluent.io/platform/current/installation/license.html&quot;&gt;https://docs.confluent.io/platform/current/installation/license.html&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick Start&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://docs.confluent.io/platform/current/quickstart/ce-quickstart.html&quot;&gt;docker&lt;/a&gt;, &lt;a href=&quot;https://docs.confluent.io/platform/current/quickstart/ce-docker-quickstart.html&quot;&gt;local&lt;/a&gt; / &lt;a href=&quot;https://docs.confluent.io/platform/current/quickstart/ce-docker-quickstart.html&quot;&gt;docker(ce)&lt;/a&gt;, &lt;a href=&quot;https://docs.confluent.io/platform/current/quickstart/ce-docker-quickstart.html&quot;&gt;local(ce)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;※ 종류&lt;ul&gt;
&lt;li&gt;Develop License: 클러스터 당 1개의 Broker만 사용하는 전제로 플랫폼의 모든 기능을 사용 가능.&lt;/li&gt;
&lt;li&gt;Trial License: 30일 체험판 기간동안 모든 기능을 사용 가능.&lt;/li&gt;
&lt;li&gt;Enterprise License: 모든 기능 사용 가능.&lt;/li&gt;
&lt;li&gt;Community License: 내장된 Connector와 Confluent Hub의 몇몇 Connector, &lt;code&gt;REST Proxy&lt;/code&gt;, &lt;code&gt;ksqlDB&lt;/code&gt;, &lt;code&gt;Schema Registry&lt;/code&gt; 등을 사용 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;2-3-3. Debizium&lt;/h4&gt;
&lt;p&gt;Apache Kafka에 변경사항만 전송할 수 있도록, DB의 &lt;code&gt;CDC기능&lt;/code&gt;을 이용한 &lt;strong&gt;Kafka-Connector(Source)&lt;/strong&gt; 를 제공하고 있다.&lt;/p&gt;
&lt;p&gt;(단, Source DB에 대한 관리권한 등이 없거나 CDC 기능을 사용할 수 없다면 적용이 어려울 수 있다.)&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-&lt;/th&gt;
&lt;th&gt;-&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;URL&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://debezium.io/&quot;&gt;https://debezium.io/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Download&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://debezium.io/releases/&quot;&gt;https://debezium.io/releases/&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;License&lt;/td&gt;
&lt;td&gt;APACHE LICENSE, VERSION 2.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick Start&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://debezium.io/documentation/reference/tutorial.html&quot;&gt;docker&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;※ 참고&lt;ul&gt;
&lt;li&gt;CDC(Change Data Capture) 오픈 소스 Debezium 쓸까? 말까?: &lt;a href=&quot;https://www.sosconhistory.net/soscon2019/content/data/session/Day%202_1730_2.pdf&quot;&gt;https://www.sosconhistory.net/soscon2019/content/data/session/Day%202_1730_2.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Streaming data changes in MySQL into ElasticSearch using Debezium, Kafka, and Confluent JDBC Sink Connector: &lt;a href=&quot;https://medium.com/dana-engineering/streaming-data-changes-in-mysql-into-elasticsearch-using-debezium-kafka-and-confluent-jdbc-sink-8890ad221ccf&quot;&gt;https://medium.com/dana-engineering/streaming-data-changes-in-mysql-into-elasticsearch-using-debezium-kafka-and-confluent-jdbc-sink-8890ad221ccf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. Kafka 체험&lt;/h2&gt;
&lt;p&gt;Kafka 팀에서 제공해주는 친절하고 이해하기 쉬운 예제가 있다.&lt;/p&gt;
&lt;p&gt;원문 링크와 함께 &lt;code&gt;개인적으로 간결히 재정리&lt;/code&gt; 하였다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;예제 - Quick Start&lt;ul&gt;
&lt;li&gt;원문: &lt;a href=&quot;http://kafka.apache.org/quickstart&quot;&gt;http://kafka.apache.org/quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;환경:&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Linux&lt;/code&gt; / Windows&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Kafka 2.7.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Java 8&lt;/code&gt; 버전 이상&lt;/li&gt;
&lt;li&gt;&lt;code&gt;9092&lt;/code&gt; Port&lt;/li&gt;
&lt;li&gt;터미널 4개&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;구성:&lt;ul&gt;
&lt;li&gt;bin/zookeeper-server-start.sh:&lt;/li&gt;
&lt;li&gt;bin/kafka-server-start.sh&lt;/li&gt;
&lt;li&gt;bin/kafkac-topic.sh&lt;/li&gt;
&lt;li&gt;bin/kafkac-console-producer.sh&lt;/li&gt;
&lt;li&gt;bin/kafkac-console-consumer.sh&lt;/li&gt;
&lt;li&gt;※ Windows에서 실행시 &lt;strong&gt;bin/{FILE}.sh&lt;/strong&gt;이 아니라 &lt;code&gt;bin/windows/{FILE}.bat&lt;/code&gt;를 이용한다. - 예) bin/&lt;strong&gt;windows/&lt;/strong&gt;zookeeper-server-start.&lt;strong&gt;bat&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3-1. Kafka &lt;strong&gt;환경 설치&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Download:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.apache.org/dyn/closer.cgi?path=/kafka/2.7.0/kafka_2.13-2.7.0.tgz&quot;&gt;https://www.apache.org/dyn/closer.cgi?path=/kafka/2.7.0/kafka_2.13-2.7.0.tgz&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Extract&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  tar -xzf kafka_2.13-2.7.0.tgz&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3-2. Kafka &lt;strong&gt;환경 실행&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Run&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  cd kafka_2.13-2.7.0
  bin/zookeeper-server-start.sh config/zookeeper.properties
  bin/kafka-server-start.sh config/server.properties&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;※ zookeeper와의 의존성을 제거하려는 움직임이 있는 듯 하지만 아직은 실행이 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3-3. Kafka에 &lt;strong&gt;Topic 생성&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create Topic&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check Topic&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3-4. console-producer와 console-consumer로 data를 &lt;strong&gt;Topic에 쓰기/읽기&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;kafka-console-producer 실행&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;아무 글이나 입력해 본다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  hello kafka!?&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;kafka-console-consumer 실행&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;p&gt;※ &lt;code&gt;--from-beginning&lt;/code&gt; 옵션으로 topic에 &lt;strong&gt;기존에 입력되었던 data를 실행과 함께 출력&lt;/strong&gt;한다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;실행과 함께 출력된 Message&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; hello kafka!?&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;추가적으로 &lt;strong&gt;kafka-console-producer창에 가서 아무 말이나 더 입력&lt;/strong&gt;해보면, 바로 &lt;strong&gt;kafka-console-consumer에 출력&lt;/strong&gt;되는 것을 볼 수 있다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3-5. Stop all&lt;/h3&gt;
&lt;p&gt;다음 순으로 [&lt;code&gt;CTRL&lt;/code&gt;] + [&lt;code&gt;C&lt;/code&gt;]로 종료.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;kafka-&lt;strong&gt;console-producer&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;kafka-&lt;strong&gt;console-consumer&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;kafka-server&lt;/strong&gt;-start&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zookeeper-server&lt;/strong&gt;-start&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;3-6. Remove data&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;FileSystem에 저장된 data까지 지우고 싶다면, 다음 2 경로를 제거한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/tmp/kafka-logs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/tmp/zookeeper&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;예)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  rm -rf /tmp/kafka-logs /tmp/zookeeper&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;※ Windows의 경우 실행한 드라이브의 Root에 생성되어 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;C:\\tmp\\kafka-logs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;C:\\tmp\\zookeeper&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;4. Kafka API&lt;/h2&gt;
&lt;p&gt;Kafka 팀에서 다음 API를 제공해주고 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;INTRODUCTION: &lt;a href=&quot;http://kafka.apache.org/intro#intro_apis&quot;&gt;http://kafka.apache.org/intro#intro_apis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;API 종류&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Producer API&lt;/strong&gt;: 여러 topic에 Event Stream을 &lt;code&gt;publish&lt;/code&gt;(쓰기) 처리.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consumer API&lt;/strong&gt;: 여러 topic을 &lt;code&gt;subscribe&lt;/code&gt;(읽기)하고 produce된 Event Stream을 처리.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Streams API&lt;/strong&gt;: transformations(변환), aggregations(집계) 및 joins(병합), windowing, 이벤트 시간 기반 처리 등.. Event Stream을 처리하는 &lt;code&gt;higher-level functions&lt;/code&gt;을 제공.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connect API&lt;/strong&gt;: 외부시스템/애플리케이션에서 Event Stream을 읽기/쓰기, Data 가져오기/내보내기. 그러나 Kafka 커뮤니티에서 &lt;code&gt;이미 즉시 사용할 수있는 수백 개의 커넥터를 제공&lt;/code&gt; 중..&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Admin API&lt;/strong&gt;: Topic, Broker 및 Kafka객체를 &lt;code&gt;관리&lt;/code&gt;/&lt;code&gt;검사&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;5. Reference&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CDC(Change Data Capture) 오픈 소스 Debezium 쓸까? 말까?: &lt;a href=&quot;https://www.sosconhistory.net/soscon2019/content/data/session/Day%202_1730_2.pdf&quot;&gt;https://www.sosconhistory.net/soscon2019/content/data/session/Day%202_1730_2.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Streaming data changes in MySQL into ElasticSearch using Debezium, Kafka, and Confluent JDBC Sink Connector: &lt;a href=&quot;https://medium.com/dana-engineering/streaming-data-changes-in-mysql-into-elasticsearch-using-debezium-kafka-and-confluent-jdbc-sink-8890ad221ccf&quot;&gt;https://medium.com/dana-engineering/streaming-data-changes-in-mysql-into-elasticsearch-using-debezium-kafka-and-confluent-jdbc-sink-8890ad221ccf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Kafka] #1 - 아파치 카프카(Apache Kafka)란 무엇인가?: &lt;a href=&quot;https://soft.plusblog.co.kr/3&quot;&gt;https://soft.plusblog.co.kr/3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Kafka] #2 - 아파치 카프카(Apache Kafka) 설치 및 실행, Quickstart: &lt;a href=&quot;https://soft.plusblog.co.kr/4&quot;&gt;https://soft.plusblog.co.kr/4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;APACHE KAFKA QUICKSTART: &lt;a href=&quot;http://kafka.apache.org/quickstart&quot;&gt;http://kafka.apache.org/quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Supported Versions and Interoperability: &lt;a href=&quot;https://docs.confluent.io/platform/current/installation/versions-interoperability.html&quot;&gt;https://docs.confluent.io/platform/current/installation/versions-interoperability.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;내부 데이터 파이프라인에 Kafka Streams 적용하기: &lt;a href=&quot;https://engineering.linecorp.com/ko/blog/applying-kafka-streams-for-internal-message-delivery-pipeline/&quot;&gt;https://engineering.linecorp.com/ko/blog/applying-kafka-streams-for-internal-message-delivery-pipeline/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Kafka 101] 카프카 메시지와 토픽과 파티션 (Kafka Message, Topic and Partition): &lt;a href=&quot;https://always-kimkim.tistory.com/entry/kafka101-message-topic-partition&quot;&gt;https://always-kimkim.tistory.com/entry/kafka101-message-topic-partition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;kafka 설정을 사용한 문제해결: &lt;a href=&quot;https://saramin.github.io/2019-09-17-kafka/&quot;&gt;https://saramin.github.io/2019-09-17-kafka/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[번역] 카프카 컨슈머 소개: 새 아파치 카프카 0.9 컨슈머 클라이언트 시작하기: &lt;a href=&quot;https://free-strings.blogspot.com/2016/05/09.html&quot;&gt;https://free-strings.blogspot.com/2016/05/09.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[카프카(Kafka) 어플리케이션 제작 ] #2. 컨슈머: &lt;a href=&quot;https://team-platform.tistory.com/37&quot;&gt;https://team-platform.tistory.com/37&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Kafka 이해하기 - 카프카의 구성요소, 동작원리, Exactly-delivery-once 모델 차용: &lt;a href=&quot;https://medium.com/@umanking/%EC%B9%B4%ED%94%84%EC%B9%B4%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%9D%B4%EC%95%BC%EA%B8%B0-%ED%95%98%EA%B8%B0%EC%A0%84%EC%97%90-%EB%A8%BC%EC%A0%80-data%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%9D%B4%EC%95%BC%EA%B8%B0%ED%95%B4%EB%B3%B4%EC%9E%90-d2e3ca2f3c2&quot;&gt;https://medium.com/@umanking/%EC%B9%B4%ED%94%84%EC%B9%B4%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%9D%B4%EC%95%BC%EA%B8%B0-%ED%95%98%EA%B8%B0%EC%A0%84%EC%97%90-%EB%A8%BC%EC%A0%80-data%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%9D%B4%EC%95%BC%EA%B8%B0%ED%95%B4%EB%B3%B4%EC%9E%90-d2e3ca2f3c2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Kafka Replication (복제): &lt;a href=&quot;https://goodgid.github.io/Kafka-Replication/&quot;&gt;https://goodgid.github.io/Kafka-Replication/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Kafka] Zookeeper: 분산 애플리케이션을 관리하는 코디네이션 시스템: &lt;a href=&quot;https://ooeunz.tistory.com/113&quot;&gt;https://ooeunz.tistory.com/113&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[kafka][용어정리] ISR : In Sync Replica: &lt;a href=&quot;https://log-laboratory.tistory.com/234?category=1109284&quot;&gt;https://log-laboratory.tistory.com/234?category=1109284&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>TOOL/Kafka</category>
      <category>Broker</category>
      <category>distributed</category>
      <category>kafka</category>
      <category>zookeeper</category>
      <category>메세지</category>
      <category>분산</category>
      <category>분산 데이터</category>
      <category>스트리밍</category>
      <category>아파치</category>
      <category>카프카</category>
      <author>forgiveall</author>
      <guid isPermaLink="true">https://forgiveall.tistory.com/621</guid>
      <comments>https://forgiveall.tistory.com/621#entry621comment</comments>
      <pubDate>Tue, 20 Apr 2021 14:45:59 +0900</pubDate>
    </item>
    <item>
      <title>[Kafka] 오류: 기본 클래스 org.apache.zookeeper.server.quorum.QuorumPeerMain을(를) 찾거나 로드할 수 없습니다</title>
      <link>https://forgiveall.tistory.com/620</link>
      <description>&lt;h1&gt;Kafka&lt;/h1&gt;
&lt;h2&gt;1. Error - 오류&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;오류: 기본 클래스 org.apache.zookeeper.server.quorum.QuorumPeerMain을(를) 찾거나 로드할 수 없습니다&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;2. Problem - 문제&lt;/h2&gt;
&lt;p&gt;Windows(윈도우)용 실행파일은 따로 있다.&lt;/p&gt;
&lt;h2&gt;3. Solved - 해결&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;bin/{FILE}.sh&lt;/strong&gt;이 아니라 &lt;code&gt;bin/windows/{FILE}.bat&lt;/code&gt;를 이용한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;예)&lt;ul&gt;
&lt;li&gt;bin/zookeeper-server-start.sh ==&amp;gt; bin/&lt;strong&gt;windows/&lt;/strong&gt;zookeeper-server-start.&lt;strong&gt;bat&lt;/strong&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;  bin/windows/zookeeper-server-start.bat&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;bin/kafka-server-start.sh ==&amp;gt; bin/&lt;strong&gt;windows/&lt;/strong&gt;kafka-server-start.&lt;strong&gt;bat&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;bin/kafka-topic.sh ==&amp;gt; bin/&lt;strong&gt;windows/&lt;/strong&gt;kafka-topic.&lt;strong&gt;bat&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;bin/kafka-console-producer.sh ==&amp;gt; bin/&lt;strong&gt;windows/&lt;/strong&gt;kafka-console-producer.&lt;strong&gt;bat&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;bin/kafka-console-consumer.sh ==&amp;gt; bin/&lt;strong&gt;windows/&lt;/strong&gt;kafka-console-consumer.&lt;strong&gt;bat&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;4. Reference - 참조&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Windows에서 Apache Kafka 오류-주 클래스 QuorumPeerMain을 찾거나로드 할 수 없습니다: &lt;a href=&quot;https://www.javaer101.com/ko/article/14155627.html&quot;&gt;https://www.javaer101.com/ko/article/14155627.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>LANGUAGE/!$%!% ERROR NOTE</category>
      <category>Bat</category>
      <category>Error</category>
      <category>kafka</category>
      <category>QuorumPeerMain</category>
      <category>Win10</category>
      <category>windows</category>
      <category>zookeeper</category>
      <author>forgiveall</author>
      <guid isPermaLink="true">https://forgiveall.tistory.com/620</guid>
      <comments>https://forgiveall.tistory.com/620#entry620comment</comments>
      <pubDate>Tue, 20 Apr 2021 14:07:18 +0900</pubDate>
    </item>
    <item>
      <title>in a nutshell?</title>
      <link>https://forgiveall.tistory.com/619</link>
      <description>&lt;p&gt;간단히 말해서&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예1)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; How does Kafka work in a nutshell?&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; 카프카는 간단히 말해서 어떻게 작동합니까?&lt;/p&gt;</description>
      <category>LANGUAGE/ENGLISH</category>
      <author>forgiveall</author>
      <guid isPermaLink="true">https://forgiveall.tistory.com/619</guid>
      <comments>https://forgiveall.tistory.com/619#entry619comment</comments>
      <pubDate>Tue, 20 Apr 2021 12:23:12 +0900</pubDate>
    </item>
    <item>
      <title>[Kafka] windows10 kafka-tool 오류..</title>
      <link>https://forgiveall.tistory.com/618</link>
      <description>&lt;h1&gt;Kafka&lt;/h1&gt;
&lt;h2&gt;Kafka-Tool&lt;/h2&gt;
&lt;h3&gt;1. Error - 오류&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;[2020-10-20 22:18:22,415] WARN The configuration &amp;#39;metrics.context.connect.kafka.cluster.id&amp;#39; was supplied but isn&amp;#39;t a known config. (org.apache.kafka.clients.producer.ProducerConfig)
[2020-10-20 22:18:22,416] WARN The configuration &amp;#39;metrics.context.connect.group.id&amp;#39; was supplied but isn&amp;#39;t a known config. (org.apache.kafka.clients.producer.ProducerConfig)
[2020-10-20 22:18:23,231] WARN [Producer clientId=connector-producer-test_001-0] Error while fetching metadata with correlation id 3 : {test_001_DOBJ_LOG=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. Problem - 문제&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Bug: &lt;a href=&quot;https://issues.apache.org/jira/browse/KAFKA-7020&quot;&gt;https://issues.apache.org/jira/browse/KAFKA-7020&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Windows10(윈도우10)에서 Kafka 모니터링&amp;amp;관리 도구인 &lt;code&gt;Kafka Tool&lt;/code&gt;로 topic을 하나 지웠더니 발생했다.&lt;/p&gt;
&lt;h3&gt;3. Solved - 해결&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Kafka 다 끄고&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;c:\tmp\&lt;/strong&gt;에 자동으로  &lt;code&gt;kafka-logs&lt;/code&gt; 와 &lt;code&gt;zookeeper&lt;/code&gt; 폴더가 생겨있는데 이를 2개 다 지우자. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;p.s 또한, 애시당초 Windows에서의 구축은 불안정할 수 있다. &lt;code&gt;Linux를 이용하랏 ~&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;4. Reference - 참조&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;AccessDeniedException when deleting a topic on Windows Kafka: &lt;a href=&quot;https://stackoverflow.com/questions/50755827/accessdeniedexception-when-deleting-a-topic-on-windows-kafka?rq=1&quot;&gt;https://stackoverflow.com/questions/50755827/accessdeniedexception-when-deleting-a-topic-on-windows-kafka?rq=1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>LANGUAGE/!$%!% ERROR NOTE</category>
      <category>kafka</category>
      <category>kafka-tool</category>
      <category>kafka-ui</category>
      <category>Win10</category>
      <category>windows</category>
      <author>forgiveall</author>
      <guid isPermaLink="true">https://forgiveall.tistory.com/618</guid>
      <comments>https://forgiveall.tistory.com/618#entry618comment</comments>
      <pubDate>Mon, 19 Apr 2021 14:23:02 +0900</pubDate>
    </item>
    <item>
      <title>[Spark] on Windows 10 - 윈도우10에서 스파크 실행 시 필수 설정.</title>
      <link>https://forgiveall.tistory.com/617</link>
      <description>&lt;h1&gt;Spark&lt;/h1&gt;
&lt;h2&gt;Spark on Windows 10&lt;/h2&gt;
&lt;p&gt;Windows 환경에서 Spark를 사용할 때, &lt;code&gt;HDFS 관련된 오류&lt;/code&gt;가 발생한다.&lt;/p&gt;
&lt;p&gt;Windows에서는 &lt;code&gt;winutils.exe&lt;/code&gt; 파일을 다운로드하여 특정위치에 위치시키고 &lt;/p&gt;
&lt;p&gt;&lt;code&gt;HADOOP_HOME&lt;/code&gt; 환경변수를 설정해야하는 수고로움이 필요하다.&lt;/p&gt;
&lt;h3&gt;1. Error - 오류&lt;/h3&gt;
&lt;p&gt;Windows 에서 Spark를 실행시 다음 오류가 발생한다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
    at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:382)
    at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:397)
    at org.apache.hadoop.util.Shell.&amp;lt;clinit&amp;gt;(Shell.java:390)
    at org.apache.hadoop.util.StringUtils.&amp;lt;clinit&amp;gt;(StringUtils.java:80)
    at org.apache.hadoop.security.SecurityUtil.getAuthenticationMethod(SecurityUtil.java:611)
    at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:274)
    at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:262)
    at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:807)
    at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:777)
    at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:650)
    at org.apache.spark.util.Utils$.$anonfun$getCurrentUserName$1(Utils.scala:2412)
    at scala.Option.getOrElse(Option.scala:189)
    at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2412)
    at org.apache.spark.SparkContext.&amp;lt;init&amp;gt;(SparkContext.scala:303)
    at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2555)
    at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate$1(SparkSession.scala:930)
    at scala.Option.getOrElse(Option.scala:189)
    at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:921)
    at com.tutorial.spark.SimpleApp.main(SimpleApp.java:10)&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. Problem - 문제&lt;/h3&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;h3&gt;3. Solved - 해결&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Download &lt;code&gt;winutils.exe&lt;/code&gt; to &lt;strong&gt;C:\hadoop&lt;/strong&gt;\bin.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/steveloughran/winutils/blob/master/hadoop-2.7.1/bin/winutils.exe&quot;&gt;https://github.com/steveloughran/winutils/blob/master/hadoop-2.7.1/bin/winutils.exe&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set Environment Variable&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;HADOOP_HOME&lt;/code&gt;&lt;pre&gt;&lt;code&gt;  C:\hadoop&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Path&lt;/code&gt;&lt;pre&gt;&lt;code&gt;  %HADOOP_HOME%\bin&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;run CMD or PowerShell with Privilige&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;4. Reference - 참조&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;How To Install Apache Spark On Windows 10: &lt;a href=&quot;https://phoenixnap.com/kb/install-spark-on-windows-10&quot;&gt;https://phoenixnap.com/kb/install-spark-on-windows-10&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Problems running Hadoop on Windows: &lt;a href=&quot;https://cwiki.apache.org/confluence/display/HADOOP2/WindowsProblems&quot;&gt;https://cwiki.apache.org/confluence/display/HADOOP2/WindowsProblems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;winutils/hadoop-2.7.1/bin/: &lt;a href=&quot;https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin&quot;&gt;https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1/bin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;윈도우에서 spark-shell 실행하기: &lt;a href=&quot;https://javacan.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0%EC%97%90%EC%84%9C-sparkshell-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0&quot;&gt;https://javacan.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0%EC%97%90%EC%84%9C-sparkshell-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;아파치 스파크 (Apache Spark) 설치 - Window 10 환경: &lt;a href=&quot;https://alphahackerhan.tistory.com/9&quot;&gt;https://alphahackerhan.tistory.com/9&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>TOOL/Spark</category>
      <category>hdfs</category>
      <category>spark</category>
      <category>Windows10</category>
      <author>forgiveall</author>
      <guid isPermaLink="true">https://forgiveall.tistory.com/617</guid>
      <comments>https://forgiveall.tistory.com/617#entry617comment</comments>
      <pubDate>Sun, 18 Apr 2021 14:32:23 +0900</pubDate>
    </item>
    <item>
      <title>[Windows 10] 에어팟(AirPods) 윈도우에 연결하기</title>
      <link>https://forgiveall.tistory.com/616</link>
      <description>&lt;h1&gt;Windows 10&lt;/h1&gt;
&lt;h2&gt;에어팟(AirPods) 윈도우에 연결하기&lt;/h2&gt;
&lt;p&gt;Windows PC와 페어링될까? &lt;/p&gt;
&lt;p&gt;애플제품이 자신들기기에 워낙 의존적이라 안될 줄만 알았는데! 웬걸!! ... 된다!!! ㅎㅎㅎ&lt;/p&gt;
&lt;p&gt;아싸뵹! 나의 노트북(Gram)과 에어팟(AirPods Pro)를 연결하니 개꿀이다! :D&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Bluetooth가 가능하다면 연결이 된다.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;한번 연결시키면, &lt;strong&gt;다른 기기로 연결 전환도 어렵지 않다&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;1. Windows &amp;#39;&lt;code&gt;설정&lt;/code&gt;&amp;#39; 하기&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;설정&lt;/strong&gt;을 연다. (단축키: [&lt;code&gt;Win Key&lt;/code&gt;] + [&lt;code&gt;I&lt;/code&gt;] )&lt;/li&gt;
&lt;li&gt;[&lt;code&gt;장치&lt;/code&gt;]를 선택한다.&lt;/li&gt;
&lt;li&gt;[&lt;code&gt;Bluetooth 및 기타 디바이스&lt;/code&gt;]를 선택한다.&lt;/li&gt;
&lt;li&gt;&amp;#39;Bluetooth&amp;#39;를 &amp;#39;&lt;strong&gt;켬&lt;/strong&gt;&amp;#39;&lt;/li&gt;
&lt;li&gt;상단의 [&lt;code&gt;Bluetooth 또는 기타 장치 추가&lt;/code&gt;]를 눌러 &amp;#39;디바이스 추가&amp;#39; 팝업이 열리면 &lt;code&gt;Bluetooth&lt;/code&gt;를 선택한다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;에어팟의 덮개를 열고&lt;/code&gt;, 뒷면의 동그란 버튼을 꾸우우우~우욱 길게 누르고 있으면, 반대편 정면에 알림등이 하얗게 빛이난다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;목록&lt;/strong&gt;에 나타나면 &lt;strong&gt;선택&lt;/strong&gt;하고 [&lt;code&gt;완료&lt;/code&gt;]한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;2. 재연결&lt;/h3&gt;
&lt;h4&gt;다시 스마트폰(휴대폰)과 연결하려면 ???&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;해당 기기 [&lt;code&gt;설정&lt;/code&gt;]의 [&lt;code&gt;블루투스&lt;/code&gt;] 메뉴에 가서 간단히 연결시킨다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;다시 윈도우와 연결하려면 ???&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;윈도우의 [&lt;code&gt;설정&lt;/code&gt;] &amp;gt; [&lt;code&gt;장치&lt;/code&gt;] &amp;gt; [&lt;code&gt;Bluetooth 및 기타 디바이스&lt;/code&gt;]을 열고 &lt;code&gt;오디오&lt;/code&gt;란에 나타난 AirPods의 [&lt;code&gt;연결&lt;/code&gt;] 버튼을 누른다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3. Reference - 참조&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;How To : 에어팟과 에어팟 프로를 윈도우 10과 페어링하는 방법: &lt;a href=&quot;https://www.itworld.co.kr/news/153333&quot;&gt;https://www.itworld.co.kr/news/153333&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AirPod를 Windows 10에 연결하는 방법 (간단한 단계): &lt;a href=&quot;https://soundartifacts.com/ko/how-to/316-how-to-connect-airpods-to-windows-10-in-simple-steps.html&quot;&gt;https://soundartifacts.com/ko/how-to/316-how-to-connect-airpods-to-windows-10-in-simple-steps.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;How to pair Apple AirPods with your Windows 10 PC in less than a minute: &lt;a href=&quot;https://www.cnet.com/how-to/how-to-pair-apple-airpods-with-your-windows-10-pc-in-less-than-a-minute/&quot;&gt;https://www.cnet.com/how-to/how-to-pair-apple-airpods-with-your-windows-10-pc-in-less-than-a-minute/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>OS/Windows</category>
      <author>forgiveall</author>
      <guid isPermaLink="true">https://forgiveall.tistory.com/616</guid>
      <comments>https://forgiveall.tistory.com/616#entry616comment</comments>
      <pubDate>Sun, 18 Apr 2021 13:01:34 +0900</pubDate>
    </item>
    <item>
      <title>[Windows] 모니터에서 사라진 창 끄집어내기</title>
      <link>https://forgiveall.tistory.com/615</link>
      <description>&lt;h1&gt;Windows&lt;/h1&gt;
&lt;p&gt;2021년도 4월.. Windows 10에서 아직도 이런 현상이 있다니 ㅠㅠ&lt;/p&gt;
&lt;p&gt;캐당황..&lt;/p&gt;
&lt;h2&gt;1. 모니터에서 안보이는 창&lt;/h2&gt;
&lt;p&gt;분명 작업표시줄을 보니 프로그램은 켜진 것 같은데..&lt;/p&gt;
&lt;p&gt;&lt;code&gt;모니터상에서는 보이지가 않는다..&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;모니터 밖 어딘가 있는 거 같은데.. 어딨는건지.. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;창을 복구 하고 싶은데..&lt;/code&gt; 어떻게 해야하는 건지..&lt;/p&gt;
&lt;h2&gt;2. 끄집어내자!&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;숨겨진 프로그램을 &lt;code&gt;작업표시줄에서 선택&lt;/code&gt;하거나 [&lt;code&gt;Alt&lt;/code&gt;] + [&lt;code&gt;Tab&lt;/code&gt;] 으로 선택한다.  &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;먼저 [&lt;code&gt;Win Key&lt;/code&gt;] + [&lt;code&gt;방향키&lt;/code&gt;] 로 모니터 안으로 돌아오도록 조정해본다. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;3. 그래도 안나온다고!!?&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;다시 프로그램을 선택하고 [&lt;code&gt;Alt&lt;/code&gt;] + [&lt;code&gt;Space&lt;/code&gt;] 를 누르면 &lt;code&gt;창 크기 및 위치에 대한 컨텍스트 박스가 뜬다.&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;여기서 급하면 &lt;code&gt;최대화(X)&lt;/code&gt;로 빠르게 화면에 보이게 띄울 수는 있을 것이다. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;하지만, 다시 프로그램을 사용할 때 곤혹스러울 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;이동(M)&lt;/code&gt;을 선택하면 마우스가 해당 창의 상단으로 이동된다. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;화면에서 보이지 않겠지만, 조심스럽게 처음엔 마우스를  움직이지 말고 왼쪽 버튼을 꾸욱눌러 드래그를 하면서 움직여보자. &lt;/li&gt;
&lt;li&gt;또는 방향키로 움직여서 끄집어낼 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;도전!?&lt;/p&gt;
&lt;h3&gt;4. Reference&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;화면에서 사라진 창 이동시키기, 모니터 밖에 있는 창 보이게하기, 스크린 밖에 있는 창 복구: &lt;a href=&quot;https://neweducation2.tistory.com/2090&quot;&gt;https://neweducation2.tistory.com/2090&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>OS/Windows</category>
      <author>forgiveall</author>
      <guid isPermaLink="true">https://forgiveall.tistory.com/615</guid>
      <comments>https://forgiveall.tistory.com/615#entry615comment</comments>
      <pubDate>Wed, 14 Apr 2021 00:25:08 +0900</pubDate>
    </item>
  </channel>
</rss>