본관은 광산(光山). 자는 진옥(晉玉). 길주(吉州) 출신. 아버지는 김호겸(金好謙)이며, 어머니는 여계선(呂繼先)의 딸이다.
1654년(효종 5) 식년 문과에 병과로 급제하였다.
1660년(현종 1) 입수성찰방(立輸城察訪)으로 있을 때, 죄인 원세흠(元世欽)의 유배지를 정하지 않았으며, 폐단을 만들고 말을 함부로 하였다고 하여 파직되었다. 그러나 1667년 홍원현감으로 재직하고 있을 때에는 암행어사의 추천으로 상을 받기도 하였다. 1675년(숙종 1) 예조정랑이 되었다.
이때 송시열(宋時烈)이 자의대비(慈懿大妃)의 복상문제로 인하여 화를 당하게 되자, 수찬 강석창(姜碩昌)과 함께 소를 올려 그 억울함을 호소하다가 도리어 파직당하였다. 1680년 경신대출척(庚申大黜陟)으로 다시 등용되어 성균관에 보직을 받은 바 있고, 삼화현령(三和縣令)을 역임하였다.